我可以将数据发送到服务器,但仅限于使用FromBody-Attribute。
为什么json数据不会使用帖子自动从Body中读取?
后端网络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;
});
};
答案 0 :(得分:19)
仅仅因为某些事情是POST请求,没有明确的规则如何传输参数。 POST请求仍然可以包含URL中编码的查询参数。方法参数应该是“简单”类型(字符串,整数等)的查询参数。
复杂类型通常应该是POST表单对象。标准的ASP.NET POST请求是表单提交,例如登录时。这些请求中的参数通常编码为application/x-www-form-urlencoded
,基本上是一串键/值对。对于复杂的参数类型,例如表单视图模型对象,这是默认值。
对于所有其他非默认情况,您需要明确表示方法参数的来源,以及如何在请求中传输它。为此目的,有许多不同的属性:
FromBodyAttribute
- 适用于来自请求正文的参数FromFormAttribute
- 适用于来自单个表单数据字段的参数FromHeaderAttribute
- 适用于来自HTTP标头字段的参数FromQueryAttribute
- 对于来自URL中编码的查询参数的参数FromRouteAttribute
- 适用于来自路线数据的参数FromServicesAttribute
- 对于应在方法级注入服务的参数