一尘不染

为什么在POST正文中需要数据时为什么需要FromBody属性

angularjs

我可以将数据发送到服务器,但是只有在使用FromBody-Attribute时才可以。

为什么无法使用Post从主体自动读取json数据?

后端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;
  });
};

阅读 1030

收藏
2020-07-04

共1个答案

一尘不染

仅因为某事是POST请求,所以没有明确的规则如何传递参数。POST请求仍可以包含URL中编码的查询参数。方法参数应该是“简单”类型(字符串,整数等)的查询参数。

通常,复杂类型应该是POST表单对象。标准的ASP.NET
POST请求是一种表单提交,例如,在登录时。这些请求中的参数通常编码为application/x-www-form- urlencoded,基本上是键/值对的字符串。对于复杂的参数类型(例如,表单视图模型对象),将其假定为默认值。

对于所有其他非默认情况,您需要明确说明方法参数的来源,其在请求中的传输方式。为此,有许多不同的属性:

  • FromBodyAttribute –对于来自请求正文的参数
  • FromFormAttribute –对于来自单个表单数据字段的参数
  • FromHeaderAttribute –对于来自HTTP标头字段的参数
  • FromQueryAttribute –对于来自URL中编码的查询参数的参数
  • FromRouteAttribute –对于来自路径数据的参数
  • FromServicesAttribute –对于应在方法级别注入服务的参数
2020-07-04