Ошибка неподдерживаемого типа носителя HTTP 415 при вызове конечной точки Web API 2

У меня есть существующая служба Web API 2, и мне нужно изменить один из методов, чтобы использовать пользовательский объект в качестве другого параметра, в настоящее время у метода есть один параметр, представляющий собой простую строку из URL. После добавления пользовательского объекта в качестве параметра теперь я получаю ошибку неподдерживаемого типа носителя 415 при вызове службы из приложения Windows .NET. Интересно, что я могу успешно вызвать этот метод, используя javascript и метод jquery ajax.

Метод службы Web API 2 выглядит следующим образом:

<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

Метод позволяет какPOST а такжеGET посколькуPaging Объект не является обязательным. Если я вызываю этот метод сGET запрос это работает.

А простой клиентский код .NET, вызывающий службу, выглядит так:

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

Клиент .NET работает на платформе 4.5, а сервис на платформе 4.5.2. Ошибка выдается наresp = req.GetResponse() линия. Некоторые вещи, которые я уже пробовал:

на клиенте установитеreq.Accept значение для «application / xml» или «text / xml»в методе службы убрана строка `resp.Content.Headers.ContentType.MediaType =" text / xml "заменил содержимое XML-ответа на некоторый статический JSON, попытался исключить любые проблемы с отправкой в ​​JSON запроса и получением XML-ответа на ответ

До сих пор я получаю одно и то же сообщение об ошибке 415, что бы я ни пытался.

Я упоминал, что это работает, когда вызывается из javascript, вот мой рабочий вызов ajax:

$.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");
   }
});

Что касается службы, то здесь нет ничего необычного в настройке маршрута или чем-то еще, это почти все из готового Web API 2. Я знаю, что маршрутизация работает, вызовы правильно перенаправляются в метод, они неожиданно никуда не уйдут, так чего мне не хватает в клиенте .NET? Любая помощь высоко ценится!

--- ОБНОВИТЬ ---
Я попытался создать совершенно новый сервис Web API, чтобы исключить любые возможные проблемы с существующим сервисом, я создал контроллер с единственным методом, который принимает пользовательский объект в качестве параметра. Затем я попытался вызвать это из клиента .NET и получил ту же ошибку. Я также попытался использовать WebClient вместо HttpWebRequest, но все равно получаю ту же ошибку. Это также то, что раньше работало для меня с Web API (до Web API 2).

--- ОБНОВИТЬ ---
Я также попытался создать новое веб-приложение, используя Web API 1, когда я вызываю его с помощью POST, мой параметр сложного объекта теперь принимает значение NULL. У меня есть другой веб-сервис, работающий с Web API 1 и проверенный, что я все еще могу вызвать это успешно со сложными объектами Какова бы ни была моя проблема, похоже, что что-то с JSON проходит между клиентом и сервером. Я проверил JSON, который я отправляю, и он действителен, определение объекта также является точным соответствием между клиентом и сервером, поэтому JSON должен быть в состоянии проанализировать сервер.

Ответы на вопрос(2)

Ваш ответ на вопрос