Как вернуть объект ответа JSON - PullRequest
0 голосов
/ 06 февраля 2019

Я получаю эту ошибку, несмотря на то, что я добавил средство форматирования мультимедиа следующим образом.Я тестирую с почтальоном .Тип содержимого заголовков почтальона - application / json, а тело - x-www-form-urlencoded.Как это исправить?

"ExceptionMessage": "Нет MediaTypeFormatter, доступного для чтения объекта типа 'Initiate' из содержимого с типом носителя 'text / html'.", "ExceptionType":«System.Net.Http.UnsupportedMediaTypeException»

Вот мой пример кода:

[RoutePrefix("api/v1/pin")]
public class GameController : ApiController
{

    // POST: api/Game
    [HttpPost, Route("initiation")]
    public async System.Threading.Tasks.Task<Initiate> PurchaseInitiationAsync([FromBody]Initiate value)
    {

        if (value == null)
        {
            var message = new HttpResponseMessage(HttpStatusCode.NotFound)
            {
                Content = new StringContent(string.Format("Request is NULL! Please check your data.")),  
                ReasonPhrase = "Request is NULL! Please check your data."
            };

            throw new HttpResponseException(message);
        }

        HttpClient httpClient = new HttpClient();

        HttpContent content = new StringContent(
            JsonConvert.SerializeObject(value),
            Encoding.UTF8,
            "application/json"
        );



        HttpResponseMessage response =
            await httpClient.PostAsync("http://test:1907/purchase_initiation", content);


        var obj = response.Content.ReadAsAsync<Initiate>(
            new List<MediaTypeFormatter>
            {
                new JsonMediaTypeFormatter()
            }).Result;

        return obj;
    }


}

1 Ответ

0 голосов
/ 06 февраля 2019

Я могу воспроизвести это только в том случае, если для типа содержимого запроса установлено значение api/v1/pin/initiation, равное text/html.Вы говорите, что ваши настройки Почтальона установлены на application/json, а тело - x-www-form-urlencoded, но из моего тестирования, если бы это было так, исключение, которое вы показали выше, не было бы выброшено.

Я бы удвоилубедитесь, что почтальон действительно отправляет правильный заголовок типа контента, открыв консоль почтальона (CTRL + ALT + C) и проверив заголовки запроса.

enter image description here

...