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:
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!