Saltar al contenido

C# HttpClient, se obtiene un error No se puede agregar valor porque el encabezado ‘tipo de contenido’ no admite valores múltiples

Este dilema se puede abordar de diversas maneras, sin embargo te dejamos la solución más completa en nuestra opinión.

Solución:

No tengo .NET 4.5 listo, pero según HttpContentHeaders.ContentType y MediaTypeHeaderValuedebería verse algo como esto:

content.Headers.ContentType = new MediaTypeHeaderValue("text/html");

Este error implica que intenta agregar un encabezado que ya se agregó al DefaultRequestHeaders (no solo content-type encabezado, pero cualquier otro encabezado que no admita valores múltiples).


En mi caso, estaba iniciando los encabezados desde dos lugares diferentes y accidentalmente agregué el mismo key encabezado dos veces (por ejemplo content-type o Authentication).

Dentro de startup.cs, IHttpClientFactory (documentación) como:

services.AddHttpClient("MyHttpClient", client =>

    client.BaseAddress = new Uri("https://www.google.co.il/");
    client.Timeout = new TimeSpan(0, 1, 0);
    client.DefaultRequestHeaders.Add("content-type", "application/json"));
    client.DefaultRequestHeaders.Add("Authorization", "some values"));
);

Y se actualizó dentro del servicio al cliente:

HttpClient httpClient = this._httpClientFactory.CreateClient("MyHttpClient");    
httpClient.DefaultRequestHeaders.Add("content-type", "application/json")); //Throws Exception!
httpClient.DefaultRequestHeaders.Add("Authorization", "some values")); //Throws Exception!

ACTUALIZACIÓN: En los casos en que quiera estar seguro de que puede agregar un encabezado, puede usar con cuidado el DefaultRequestHeaders.Clear()

Tan pronto como asigne un valor de texto al HttpContent haciendo esto:

HttpContent content = new StringContent(text);

el tipo de contenido se establece automáticamente para ese contenido. Este tipo de contenido (en el caso de contenido de cadena) es: text/plain; charset=utf-8

Entonces, en el siguiente paso, cuando intenta establecer explícitamente el encabezado de tipo de contenido, obtiene el error: No se puede agregar valor porque el encabezado ‘Content-Type’ no admite varios valores.

Hay tres formas de establecer el tipo de contenido y evitar este error:

Opción 1. Especifique el tipo de contenido al configurar el contenido

HttpContent content = new StringContent(text, System.Text.Encoding.UTF8, "text/html");

Opcion 2. Establecer la propiedad ContentType

HttpContent content = new StringContent(text);    
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/html");

Opción 3. Primero elimine el encabezado de tipo de contenido asignado automáticamente y luego agregue ese encabezado nuevamente.

HttpContent content = new StringContent(text);  
content.Headers.Remove("content-type");  
content.Headers.Add("content-type", "text/html");

Comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *