Saltar al contenido

Error de tipo de medio no admitido HTTP 415 al llamar al extremo de la API web 2

Solución:

RESUELTO

Después de golpearme la cabeza contra la pared durante un par de días con este problema, parecía que el problema tenía algo que ver con la negociación del tipo de contenido entre el cliente y el servidor. Profundicé en eso usando Fiddler para verificar los detalles de la solicitud provenientes de la aplicación cliente, aquí hay una captura de pantalla de la solicitud sin procesar capturada por Fiddler:

Captura de Fiddler de la solicitud http desde la aplicación del cliente

Lo que obviamente falta es el Content-Type encabezado, a pesar de que lo estaba configurando como se ve en el ejemplo de código en mi publicación original. Pensé que era extraño que el Content-Type nunca llegó a pesar de que lo estaba configurando, así que eché otro vistazo a mi otro código (en funcionamiento) llamando a un servicio de API web diferente, la única diferencia fue que estaba configurando el req.ContentType propiedad antes de escribir al cuerpo de la solicitud en ese caso. Hice ese cambio en este nuevo código y eso lo hizo, el Content-Type ahora estaba apareciendo y obtuve la respuesta de éxito esperada del servicio web. El nuevo código de mi cliente .NET ahora se ve así:

req.Method = "POST"
req.ContentType = "application/json"
lstrPagingJSON = JsonSerializer(Of Paging)(lPaging)
bytData = Encoding.UTF8.GetBytes(lstrPagingJSON)
req.ContentLength = bytData.Length
reqStream = req.GetRequestStream()
reqStream.Write(bytData, 0, bytData.Length)
reqStream.Close()
'// Content-Type was being set here, causing the problem
'req.ContentType = "application/json"

Eso es todo lo que fue, el ContentType la propiedad solo necesitaba establecerse antes de escribir en el cuerpo de la solicitud

Creo que este comportamiento se debe a que una vez que el contenido se escribe en el cuerpo, se transmite al punto final del servicio al que se llama, cualquier otro atributo relacionado con la solicitud debe establecerse antes de eso. Por favor corríjame si me equivoco o si esto necesita más detalles.

Experimenté este problema al llamar a mi punto final de API web y lo resolví.

En mi caso, fue un problema en la forma en que el cliente codificaba el contenido del cuerpo. No estaba especificando la codificación o el tipo de medio. Especificarlos lo resolvió.

Sin especificar el tipo de codificación, provocó el error 415:

var content = new StringContent(postData);
httpClient.PostAsync(uri, content);

Especificar la codificación y el tipo de medio, éxito:

var content = new StringContent(postData, Encoding.UTF8, "application/json");
httpClient.PostAsync(uri, content);

También experimenté este error.

Agrego en el encabezado Content-Type: application/json. Después del cambio, ¡mis envíos se realizaron correctamente!

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



Utiliza Nuestro Buscador

Deja una respuesta

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