Зачем мне нужен атрибут FromBody при ожидании данных в теле POST
Я могу отправлять свои данные на сервер, но только когда я использую атрибут FromBody.
почему данные json не считываются автоматически из тела с помощью Post?
Backend Web api
[HttpPost]
public async Task<IActionResult> Post([FromBody]CreateSchoolyearRequestDTO dto)
{
}
интерфейс angularjs
this.createSchoolyear = function (schoolyear) {
var path = "/api/schoolyears";
return $http({
url: path,
method: "POST",
data: schoolyear,
contentType: "application/json"
}).then(function (response) {
return response;
});
};
1 ответов
просто потому, что что-то является запросом POST, нет четкого правила, как передаются аргументы. Запрос POST все еще может содержать параметры запроса, закодированные в URL-адресе. Ожидается, что параметр метода будет параметром запроса для "простых" типов (строк, ints и т. д.).
обычно ожидается, что сложные типы будут объектами POST form. Стандарт ASP.NET POST request - это форма отправки, например, при входе в систему. Параметры в этом запросе обычно кодируются как application/x-www-form-urlencoded
, в основном строка пар ключ / значение. Для сложных типов параметров, например, объектов модели вида формы, это считается значением по умолчанию.
для всех других нестандартных ситуаций вам нужно быть явным, откуда берется параметр метода, как он передается в запросе. Для этой цели существует ряд различных атрибутов:
-
FromBodyAttribute
- для параметров, поступающих из тела запроса -
FromFormAttribute
- для параметров которые приходят от a поле данных одной формы -
FromHeaderAttribute
– для параметров из HTTP-заголовка поле -
FromQueryAttribute
- для параметров, которые исходят из аргумента запроса, закодированного в URL -
FromRouteAttribute
– для параметров, которые берутся из данных маршрута -
FromServicesAttribute
- для параметров, для которых службы должны быть введены на уровне метода