it-swarm.com.ru

Ошибка отправки JSON в POST к веб-сервису API

Я создаю веб-сервис с использованием веб-API. Я реализовал простой класс

public class ActivityResult
{
    public String code;
    public int indexValue;
    public int primaryCodeReference;
}

И тогда я реализовал внутри моего контроллера

[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}

Но когда я вызываю API, передавая в POST файл json:

{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}

Я получаю следующее сообщение об ошибке:

{
    "Message": "The request entity's media type 'text/plain' is not supported for this resource.",
    "ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'ActivityResult' from content with media type 'text/plain'.",
    "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
    "StackTrace": "   in System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   in System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}

Что я делаю неправильно?

83
GVillani82

В HTTP-запросе необходимо установить Content-Type на: Content-Type: application/json

Поэтому, если вы используете клиент Fiddler, добавьте Content-Type: application/json в заголовок запроса.

175
beaumondo

другой совет ... где добавить "content-type: application/json" ... в поле текстового поля на вкладке Composer/Parsed. Там уже заполнено 3 строки, поэтому я добавил этот Content-type в качестве 4-й строки. Это заставило Почту работать.

1
john santora

Все мои настройки были описаны в принятом ответе…. Проблема, с которой я столкнулся, заключалась в том, что я пытался обновить тип сущности Entity Framework «Task», например:

public IHttpActionResult Post(Task task)

То, что работало для меня, было создать мою собственную сущность "DTOTask", как:

public IHttpActionResult Post(DTOTask task)
0
Michael Washington

Требуется включить Content-Type:application/json в раздел заголовка запроса web api, когда не упоминается какой-либо контент, тогда по умолчанию это Content-Type:text/plain передается на запрос.

Лучший способ проверить API на инструменте почтальона.

0
Kiran Sagvekar

Пожалуйста, проверьте, если вы передаете метод как POST вместо GET. Если это так, вы получите ту же ошибку, что и вы опубликовали выше.

$http({               
 method: 'GET',

Тип мультимедиа объекта запроса «text/plain» не поддерживается для этот ресурс.

0
sudheer kondala
  1. Вы должны добавить свойство заголовка Content-Type:application/json
  2. При определении любого входного параметра метода запроса POST, который должен быть аннотирован как [FromBody], например, :

    [HttpPost]
    public HttpResponseMessage Post([FromBody]ActivityResult ar)
    {
      return new HttpResponseMessage(HttpStatusCode.OK);
    }
    
  3. Любые входные данные JSON должны быть raw data.

0
Kiran Sagvekar