是否有[FromBody]
属性的功能?我的意思是,当我使用它时:
public async Task SetUser([FromBody]User user)
当我使用时:
public async Task SetUser(User user)
服务器获得相同的对象没有问题,所以,有必要设置它,或者我可以毫无顾虑地删除它?
素不相识!
答案 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方法的目的。
您可以指定FromUri
或FromBody
来控制行为。还有BindModel
属性,可让您定义自定义绑定。