Я создаю веб-службу с помощью веб-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)"
}
Что я делаю не так?
Accept
заголовокapplication/json
. Вам также необходимо установитьContent-Type
заголовокapplication/json
.Ответы:
В HTTP-запросе вам необходимо установить Content-Type на:
Content-Type: application/json
Итак, если вы используете клиент-скрипач, добавьте
Content-Type: application/json
в заголовок запросаисточник
Content-Type:application/json
Когда вы определяете любой входной параметр метода запроса POST, который должен быть аннотирован
[FromBody]
, например :[HttpPost] public HttpResponseMessage Post([FromBody]ActivityResult ar) { return new HttpResponseMessage(HttpStatusCode.OK); }
Любые входные данные JSON должны быть необработанными .
источник
еще один совет ... где добавить "content-type: application / json" ... в поле текстового поля на вкладке Composer / Parsed. Там уже заполнены 3 строки, поэтому я добавил этот Content-type как 4-ю строку. Это заставило Почту работать.
источник
Пожалуйста, проверьте, передаете ли вы метод
POST
вместо asGET
. в этом случае вы получите ту же ошибку, что и выше.$http({ method: 'GET',
источник
Все мои настройки были описаны в принятом ответе. Проблема заключалась в том, что я пытался обновить тип сущности Entity Framework «Задача», например:
public IHttpActionResult Post(Task task)
Для меня сработало создание моей собственной сущности "DTOTask", например:
public IHttpActionResult Post(DTOTask task)
источник
Он требует включения
Content-Type:application/json
в раздел заголовка запроса веб-API, когда не упоминается какой-либо контент, тогда по умолчанию онContent-Type:text/plain
передается запросу.Лучший способ проверить api на инструменте почтальона.
источник