Cliente HTTP en C#: haciendo solicitudes correctamente de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente HTTP en C#: haciendo solicitudes correctamente de la A a la Z

\n\n

En el desarrollo moderno en la plataforma .NET, trabajar con solicitudes HTTP es una de las tareas clave. Ya sea la integración con una API REST externa, el envío de datos a un servidor o la descarga de páginas web, el uso correcto de HttpClient en C# es crítico para el rendimiento y la estabilidad de la aplicación. En este artículo, analizaremos todos los aspectos del trabajo con el cliente HTTP en C#: desde ejemplos básicos hasta técnicas avanzadas, manejo de errores y mejores prácticas.

\n\n

1. Fundamentos del trabajo con HttpClient en C#

\n\n

HttpClient es la clase principal en .NET para enviar solicitudes HTTP y recibir respuestas. Se encuentra en el espacio de nombres System.Net.Http y está disponible desde .NET Framework 4.5 y todas las versiones de .NET Core/.NET 5+.

\n\n

Regla importante: HttpClient está diseñado para su reutilización. Crear una nueva instancia para cada solicitud es un antipatrón que puede provocar el agotamiento de sockets (socket exhaustion). En su lugar, utilice una única instancia estática o singleton.

\n\n

Ejemplo básico de solicitud GET:

\n\n
using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    private static readonly HttpClient client = new HttpClient();\n\n    static async Task Main(string[] args)\n    {\n        try\n        {\n            HttpResponseMessage response = await client.GetAsync("https://api.example.com/data");\n            response.EnsureSuccessStatusCode();\n            string responseBody = await response.Content.ReadAsStringAsync();\n            Console.WriteLine(responseBody);\n        }\n        catch (HttpRequestException e)\n        {\n            Console.WriteLine($"Error en la solicitud: {e.Message}");\n        }\n    }\n}
\n\n

En este ejemplo, creamos un HttpClient estático, enviamos una solicitud GET, verificamos el éxito de la respuesta con EnsureSuccessStatusCode() y leemos el cuerpo de la respuesta como una cadena.

\n\n

2. Tipos de solicitudes HTTP y trabajo con encabezados

\n\n

Además de GET, HttpClient admite todos los métodos HTTP principales: POST, PUT, DELETE, PATCH y otros. Veamos el envío de una solicitud POST con datos JSON, que es el escenario más común al trabajar con API REST.

\n\n

Ejemplo de solicitud POST con JSON:

\n\n
using System;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    private static readonly HttpClient client = new HttpClient();\n\n    static async Task Main(string[] args)\n    {\n        var data = new { Name = "John", Age = 30 };\n        string json = JsonSerializer.Serialize(data);\n        var content = new StringContent(json, Encoding.UTF8, "application/json");\n\n        try\n        {\n            HttpResponseMessage response = await client.PostAsync("https://api.example.com/users", content);\n            response.EnsureSuccessStatusCode();\n            string result = await response.Content.ReadAsStringAsync();\n            Console.WriteLine($"Usuario creado: {result}");\n        }\n        catch (HttpRequestException e)\n        {\n            Console.WriteLine($"Error: {e.Message}");\n        }\n    }\n}
\n\n

Trabajo con encabezados: A menudo, las API requieren la transmisión de tokens de autenticación u otros encabezados. Se pueden agregar de dos maneras:

\n\n
    \n
  • Globalmente — a través de la propiedad DefaultRequestHeaders (para todas las solicitudes del cliente).
  • \n
  • Localmente — a través de la colección Headers en el objeto HttpRequestMessage (para una solicitud específica).
  • \n
\n\n

Ejemplo de adición del encabezado Authorization:

\n\n
// Globalmente\nclient.DefaultRequestHeaders.Authorization = \n    new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "your-token");\n\n// Localmente\nvar request = new HttpR                

Blogs

Book Recommendations