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

Я создаю веб-сервис с помощью Web 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 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)"
}

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

Ответ 1

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

Итак, если вы используете клиент fiddler, добавьте Content-Type: application/json в заголовок запроса

Ответ 2

еще один совет... где добавить "content-type: application/json"... в поле textbox на вкладке Composer/Parsed. Есть три строки, которые уже заполнены там, поэтому я добавил этот Content-type как 4-я строка. Это сделало работу Post.

Ответ 3

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

$http({               
 method: 'GET',

Тип носителя сообщения "text/plain" не поддерживается для этот ресурс.

Ответ 4

У меня были все настройки, включенные в принятый ответ. Проблема была в том, что я пытался обновить сущность Entity Framework типа "Задача", например:

public IHttpActionResult Post(Task task)

Что сработало для меня, так это создать свою собственную сущность "DTOTask", например:

public IHttpActionResult Post(DTOTask task)