Я пытаюсь включить проверку 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 (логический асинхронный)