Explicamos cómo solucionar el error HttpRequestException: Error al enviar la solicitud y el error WebException: Anulada la solicitud: No se puede crear un canal seguro SSL/TLS, que suceden cuando se intenta conectar a un recurso web https, usando una aplicación desarrollada en C# de Visual Studio.NET.
- Cuando se suele producir el error HttpRequestException: Error al enviar la solicitud. WebException Anulada la solicitud No se puede crear un canal seguro SSL/TLS.
- Solución al error HttpRequestException: Error al enviar la solicitud. WebException Anulada la solicitud No se puede crear un canal seguro SSL/TLS en C# C Sharp de .NET.
Cuando se suele producir el error HttpRequestException: Error al enviar la solicitud. WebException Anulada la solicitud No se puede crear un canal seguro SSL/TLS
Cuando estamos desarrollando una aplicación que requiere de conexión a una URL vía https para obtener datos, usando la clase System.Net.HttpWebRequest, en Visual Studio .NET C# y se produce un error del tipo:
System.AggregateException: ‘Se han producido uno o varios errores.’
HttpRequestException: Error al enviar la solicitud.
WebException: Anulada la solicitud: No se puede crear un canal seguro SSL/TLS.
Error que se produce al usar los métodos: System.Net.HttpWebRequest.EndGetResponse(System.IAsyncResult) y System.Net.Http.HttpClientHandler.GetResponseCallback(System.IAsyncResult).
Este error suele ser debido a que no hemos indicado el tipo de canal seguro necesario para la conexión con el recurso HTTPS. A continuación explicamos cómo solucionarlo.
Solución al error HttpRequestException: Error al enviar la solicitud. WebException Anulada la solicitud No se puede crear un canal seguro SSL/TLS en C# C Sharp de .NET
La solución es bastante sencilla, solo hay que indicar en el código C#, justo antes de la línea de código que usemos para la conexión, el tipo de protocolo, esto podemos hacerlo con:
1 2 |
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; |
Un ejemplo de uso es en una aplicación que emplea esta clase para hacer llamadas a la URL HTTPS de un Bot de Telegram:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public Bot() { new EscribirLog("Obteniendo acceso a @Bot_Telegram...", true); System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; var me = botTelegram.GetMeAsync().Result; botTelegram.OnMessage += EventoBotTelegramLeerMensajes; botTelegram.OnReceiveError += EventoBotTelegramErrorRecibido; botTelegram.StartReceiving(); Console.ReadLine(); botTelegram.StopReceiving(); new EscribirLog("Acceso al Bot concedido, ID del Bot: " + botTelegram.BotId.ToString(), true); //Iniciamos la escucha de mensajes del Bot de Telegram IniciarEscuchaMensajes(); } |
Si queremos capturar el error que se pueda producir en el uso de esta clase podemos usar un try … catch con el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
try { new EscribirLog("Obteniendo acceso a @Bot_Telegram...", true); System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; var me = botTelegram.GetMeAsync().Result; botTelegram.OnMessage += EventoBotTelegramLeerMensajes; botTelegram.OnReceiveError += EventoBotTelegramErrorRecibido; botTelegram.StartReceiving(); Console.ReadLine(); botTelegram.StopReceiving(); } catch (AggregateException e) { foreach (var ex in e.InnerExceptions) { //Mostrar error por consola Console.WriteLine(ex.Message); } } catch (Exception error) { new EscribirLog("Error al enviar/recibir mensajes al bot: " + error.GetType().ToString() + " " + error.Message, false); } |