Запутался с FromBody в ASP.NET Core - PullRequest
0 голосов
/ 09 июня 2018

У меня есть следующий метод WEB API, и у меня есть шаблон SPA с Angular:

[HttpPost]
public IActionResult Post([FromBody]MyViewModel model)

Я думал, основываясь на этой теме, нет необходимости использовать [FromBody] здесь, так как я хочу прочитать значение из тела сообщения, поэтому нет необходимости переопределять поведение по умолчанию, но, если я не использую [FromBody], модель, исходящая из Angular, будет нулевой.Я действительно запутался, почему я должен использовать [FromBody], так как я использовал поведение по умолчанию?

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

И вот альтернативный подход, предполагающий, что вам необходимо поддерживать оба значения [FromForm] и [FromBody] в вашем API контроллера ...

Front-End (угловой код):

forgotPassword(forgotPassword: ForgotPassword): Observable<number> {
  const params = new URLSearchParams();
  Object.keys(forgotPassword).forEach(key => params.append(key, forgotPassword[key]));
  return this.httpClient.post(`${this.apiAuthUrl}/account/forgotpassword`, params.toString(), { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } });
}

Back-End (код C #):

[AllowAnonymous]
[HttpPost("[action]")]
public async Task<IActionResult> ForgotPassword(ForgotPasswordViewModel model) { }

Теперь ваша подпись может оставаться неизменной, поэтому она может поддерживать оба.

И еще одинпостоянный подход, о котором я думал при обращении.

https://benfoster.io/blog/aspnet-core-customising-model-binding-conventions.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 09 июня 2018

Вопрос, на который вы ссылаетесь, относится к web-api.Вы используете core-mvc, который был переписан для объединения конвейеров для предыдущих версий mvc и web-api в один Controller класс.

При публикации json (в значении x-www-form-urlencoded), атрибут [FromBody] необходим для указания ModelBinder использовать заголовок типа содержимого для определения IInputFormatter, используемого для чтения запроса.

Для подробного объяснения привязки модели к jsonв core-mvc см. Связывание модели JSON POST в ASP.NET Core .

...