C#中[FromBody]属性的功能是什么?

时间:2016-08-26 22:02:33

标签: c# asp.net-web-api

是否有[FromBody]属性的功能?我的意思是,当我使用它时:

public async Task SetUser([FromBody]User user)

当我使用时:

public async Task SetUser(User user)

服务器获得相同的对象没有问题,所以,有必要设置它,或者我可以毫无顾虑地删除它?

素不相识!

2 个答案:

答案 0 :(得分:7)

User是一种复杂类型,因此默认情况下,服务器会尝试从请求正文中解析它。如果你有一个简单的类型 - 例如

public async Task SetUser(string userId)

服务器会尝试通过URL绑定来解析该值。您可以通过指定

来覆盖该行为
public async Task SetUser([FromBody] string userId)

为了便于阅读,我通常会在签名中留下[FromBody]

答案 1 :(得分:3)

有两种方法可以将参数传递给服务器 - 通过URI,或作为请求体的一部分。

当数据在URI中传递时,它们将成为查询字符串 - 例如http://server.com/something?userId=5。这将由具有int userId参数的操作方法处理。

在请求正文中传递数据时,您无法在URI中看到它们 - 例如,它将是http://server.com/something。然后,参数作为名称 - 值对在请求正文中传递。

然而,为了通过身体传递任何东西,必须有身体,GET请求通常没有请求体(它可以拥有它,技术上,但我不确定它是否&# 39;用于将参数传递给GET动作方法)。您通常希望在POST操作方法中使用FromBody属性来装饰参数。同样,您通常希望GET操作通过URI接收参数,这更符合GET方法的目的。

您可以指定FromUriFromBody来控制行为。还有BindModel属性,可让您定义自定义绑定。