Error de tipo de medio HTTP 415 no compatible al llamar al punto final de Web API 2

Tengo un servicio Web API 2 existente y necesito modificar uno de los métodos para tomar un objeto personalizado como otro parámetro, actualmente el método tiene un parámetro que es una cadena simple que proviene de la URL. Después de agregar el objeto personalizado como parámetro, ahora recibo un error de tipo de medio 415 no compatible al llamar al servicio desde una aplicación de Windows .NET. Curiosamente, puedo llamar con éxito a este método usando javascript y el método jquery ajax.

El método de servicio Web API 2 se ve así:

<HttpPost>
<HttpGet>
<Route("{view}")>
Public Function GetResultsWithView(view As String, pPaging As Paging) As HttpResponseMessage
   Dim resp As New HttpResponseMessage
   Dim lstrFetchXml As String = String.Empty
   Dim lstrResults As String = String.Empty

   Try
      '... do some work here to generate xml string for the response
      '// write xml results to response
      resp.Content = New StringContent(lstrResults)
      resp.Content.Headers.ContentType.MediaType = "text/xml"
      resp.Headers.Add("Status-Message", "Query executed successfully")
      resp.StatusCode = HttpStatusCode.OK
   Catch ex As Exception
      resp.StatusCode = HttpStatusCode.InternalServerError
      resp.Headers.Add("Status-Message", String.Format("Error while retrieving results from view {0}: {1}", view, ex.Message))
   End Try
   Return resp
End Function

El método permite tantoPOST yGET porque elPaging El objeto es opcional. Si llamo a este método con unGET pedirlo funciona.

Y el simple código de cliente .NET que llama al servicio se ve así:

Dim uri As String = BASE_URI + "fetch/someview"
Dim resp As HttpWebResponse
Dim sr As StreamReader
Dim lstrResponse As String
Dim reqStream As Stream
Dim bytData As Byte()
Dim req As HttpWebRequest = WebRequest.Create(uri)
Dim lstrPagingJSON As String
Dim lPaging As New Paging
Try
   lPaging.Page = 1
   lPaging.Count = 100
   lPaging.PagingCookie = ""
   req.Method = "POST"
   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()
   req.ContentType = "application/json"

   resp = req.GetResponse()

   sr = New StreamReader(resp.GetResponseStream, Encoding.UTF8)
   lstrResponse = sr.ReadToEnd
   '// do something with the response here
Catch exweb As WebException
   txtOutput.AppendText("Error during request: " + exweb.Message)
Catch ex As Exception
   txtOutput.AppendText(String.Format("General error during request to {0}: {1}", uri, ex.Message))
End Try

El cliente .NET se ejecuta en el marco 4.5 y el servicio está en el marco 4.5.2. El error se arroja alresp = req.GetResponse() línea. Algunas cosas que ya probé:

en el cliente, establezcareq.Accept valor a "application / xml" o "text / xml"en el método de servicio, eliminó la línea `resp.Content.Headers.ContentType.MediaType =" text / xml "reemplace el contenido de respuesta XML con algún JSON estático, trató de descartar cualquier problema con el envío de JSON en la solicitud y recuperar XML en la respuesta

Hasta ahora sigo recibiendo la misma respuesta de error 415 sin importar lo que intente.

Mencioné que esto funciona cuando se llama desde javascript, aquí está mi llamada ajax que funciona:

$.ajax({
   headers: {},
   url: "api/fetch/someview",
   type: "POST",
   data: "{Count:100,Page:1,PagingCookie:\"\"}",
   contentType: "application/json; charset=utf-8",
   dataType: "xml",
   success: function (data) {
      alert("call succeeded");
   },
   failure: function (response) {
      alert("call failed");
   }
});

Por el lado del servicio, no hay nada de lujoso con la configuración de la ruta o cualquier otra cosa, es prácticamente toda la API Web 2 lista para usar. Sé que el enrutamiento funciona, las llamadas se enrutan correctamente al método, no van a otro lugar inesperadamente, entonces, ¿qué me estoy perdiendo en el cliente .NET? ¡Cualquier ayuda es muy apreciada!

--- ACTUALIZACIÓN ---
Intenté crear un servicio de API web completamente nuevo para descartar cualquier posible problema con el servicio existente, creé un controlador con un único método que toma un objeto personalizado como parámetro. Luego intenté llamar eso desde el cliente .NET y obtuve el mismo error. También intenté usar WebClient en lugar de HttpWebRequest, pero aún obtengo el mismo error. Esto también es algo que anteriormente funcionó para mí con Web API (antes de Web API 2).

--- ACTUALIZACIÓN ---
También intenté crear una nueva aplicación web usando Web API 1, cuando llamo a eso con un POST, mi parámetro de objeto complejo ahora es nulo. Tengo otro servicio web que ejecuta Web API 1 y verifiqué que todavía puedo llamarlo con éxito con objetos complejos. Cualquiera que sea mi problema, parece ser algo con el JSON que pasa entre el cliente y el servidor. He verificado el JSON que estoy enviando y es válido, la definición del objeto también es una coincidencia exacta entre el cliente y el servidor, por lo que el servidor debería poder analizar el JSON.

Respuestas a la pregunta(3)

Su respuesta a la pregunta