代码之家  ›  专栏  ›  技术社区  ›  Pascal

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

  •  13
  • Pascal  · 技术社区  · 9 年前

    我可以将数据发送到服务器,但仅当我使用FromBody属性时。

    为什么不使用Post从Body中自动读取json数据?

    后端web api

    [HttpPost]
    public async Task<IActionResult> Post([FromBody]CreateSchoolyearRequestDTO dto)
    {
    
    }
    

    前端角度

    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 回复  |  直到 9 年前
        1
  •  23
  •   poke    9 年前

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

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

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

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