c # Проверка подлинности не удалась Google ReCaptcha - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь включить проверку Google ReCaptcha в свой проект, поэтому в моем классе C # есть следующий код, выполняющий запрос для проверки ключа:

try
{
    string Response = Request["g-recaptcha-response"];

    bool Valid = false;

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
    ServicePointManager.ServerCertificateValidationCallback = delegate
    {
        return true;
    };

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create
    ("https://www.google.com/recaptcha/api/siteverify?secret=MYKEY&response=" + Response);

    using (WebResponse wResponse = req.GetResponse())
    {

        using (StreamReader readStream = new StreamReader(wResponse.GetResponseStream()))
        {
            string jsonResponse = readStream.ReadToEnd();

    ...
}
    }
}
catch (WebException ex)
{
    ...
}

Но я продолжаю получать исключение ниже,Поскольку я включаю переключатель SecurityProtocol, я не ожидал получить такую ​​ошибку.Я что-то здесь упускаю?Мой проект основан на .NET Framework 4.5.У меня уже была такая ошибка, но она была устранена путем включения переключателя SecurityProtocol, но не в этот раз.

Основное соединение было закрыто: при отправке произошла непредвиденная ошибка.System.IO.IOException: аутентификация не удалась, потому что удаленная сторона закрыла транспортный поток.в System.Net.Security.SslState.StartReadFrame (буфер Byte [], int32 readBytes, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartReceiveBlob (буфер Byte [], AsyncProtocolRequest asyncRes.Sec.CheckCompletionBeforeNextReceive (сообщение ProtocolToken, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.ForceAuthentication (логический буфер receiveFirst, Byte [], AsyncProtocolRequest asyncRetocolest System.Exception)..RunInternal (ExecutionContext executeContext, обратный вызов contextCallback, состояние объекта, логический preserveSyncCtx) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логический preserveSyncCtx), Состояние объекта) в System.Net.TlsStream.ProcessAuthentication (LazyAsРезультат yncResult) в System.Net.TlsStream.Write (буфер Byte [], смещение Int32, размер Int32) в System.Net.ConnectStream.WriteHeaders (логический асинхронный)

1 Ответ

0 голосов
/ 11 декабря 2018

Только что решил проблему, удалив эти строки.

ServicePointManager.ServerCertificateValidationCallback = delegate
{
    return true;
};
...