Какова функция атрибута [FromBody] в C#?
Есть ли функция [FromBody]
атрибут? Я имею в виду, когда я использую это, например:
public async Task SetUser([FromBody]User user)
и когда я использую:
public async Task SetUser(User user)
Сервер получает тот же объект без проблем, поэтому его необходимо установить, или я могу удалить его без забот?
Grettings!
2 ответа
User
это сложный тип, поэтому по умолчанию сервер будет пытаться разрешить его из тела запроса. Если у вас был простой тип - например,
public async Task SetUser(string userId)
сервер попытается разрешить значение с помощью привязки URL. Вы можете изменить это поведение, указав
public async Task SetUser([FromBody] string userId)
Я обычно ухожу [FromBody]
в подписи просто ради читабельности.
Существует два способа передачи параметров на сервер - через URI или как часть тела запроса.
Когда данные передаются в URI, они становятся строкой запроса - например, http://server.com/something?userId=5. Это будет обработано методом действия с int userId
аргумент.
Когда данные передаются в теле запроса, вы не можете видеть их в URI - например, это будет http://server.com/something. Затем параметры передаются в виде пар имя-значение в теле запроса.
Однако для того, чтобы что-то проходить через тело, должно быть тело, и у запроса GET обычно нет тела запроса (оно может быть технически, но я не уверен, используется ли он для передачи параметров в методы действия GET).). Обычно вы ожидаете, что аргументы будут украшены FromBody
атрибут в методах действия POST. Аналогично, вы обычно ожидаете, что действия GET получат аргументы через URI, что больше соответствует цели метода GET.
Вы можете указать либо FromUri
или же FromBody
контролировать поведение. Существует также BindModel
атрибут, который позволяет вам определить пользовательскую привязку.