kwaku Emma Ответов: 2

Как я могу исправить ошибку неподдерживаемый тип медиа - .Объем основного веб-API


я хочу опубликовать данные json в web api 2, но получаю ошибку 415 - неподдерживаемый тип носителя.

C-класс.
public class Person{

public int Id {get; set}

public string Name {get; set;}
}




... а ниже приведено действие контроллера webApi

//


[httpPost]
public IActionResult PostAddPerson([FromBody] Person person)
{
 // processing here

}



... json от клиента
{
  "Id":1,
 "name":"Person1"
}


Что я уже пробовал:

Я изменился
[FromBody]
который всегда возвращает null, 'человек' в
[FromForm]
, и когда я проверяю параметр "person", все свойства имеют только значения по умолчанию, а не то, что со стороны клиента.

я изменил тип контента на "application/json" на стороне клиента, и по-прежнему ничего не изменилось

ZurdoDev

Эта ошибка является ошибкой http, обычно указывающей на то, что ваш тип контента неверен.

2 Ответов

Рейтинг:
2

Thomas Daniels

FromBody должно работать, но ваш JSON недействителен: допустимый JSON имеет двойные кавычки вокруг ключей и двойные кавычки вокруг строк. Попробуйте этот JSON:

{
  "personId": 1,
  "name": "Person1"
}
Я также не знаю, будет ли это работать, чтобы иметь personId в вашем JSON но Id в вашем личном классе?


kwaku Emma

Спасибо. предыдущий json был ошибкой. Я пробовал ваше предложение, но все равно возникает та же ошибка.

Thomas Daniels

Тогда я не уверен... вы можете попробовать, чтобы ваши ключи JSON начинались с заглавной буквы, как в вашем коде C# (хотя я думаю, что он должен быть проанализирован без учета регистра, но это стоит попробовать).

Или проверьте заголовок Content-Encoding, который отправляет ваш клиент - этот заголовок также может вызвать 415.

Если проблема ни в том, ни в другом, то, боюсь, у меня закончились идеи.

kwaku Emma

спасибо за вашу помощь до сих пор. Проблема была в заголовках. Ссылаться на этот сайт о том, как установить тип контента. Что происходит Сайт Mozilla о том, как установить заголовок "Content-Type" в "application/json" это не работало на меня.

Рейтинг:
2

tobee

Вам нужно добавить этот код в свой Автозагрузки.в CS внутри ConfigureServices

services.AddControllers().AddNewtonsoftJson();


Richard Deeming

Этот вопрос относится к WebAPI 2. Ваш ответ применим к .NET Core и не объясняет, почему вы считаете, что встроенная библиотека JSON не справляется с задачей десериализации такого базового JSON.