【问题标题】:What is the function of [FromBody] Attribute in C#?C#中[FromBody]属性的作用是什么?
【发布时间】:2017-01-03 15:39:54
【问题描述】:

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

public async Task SetUser([FromBody]User user)

当我使用时:

public async Task SetUser(User user)

服务器获取相同的对象没有问题,所以,必须设置它,或者我可以放心删除它?

您好!

【问题讨论】:

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


【解决方案1】:

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

public async Task SetUser(string userId)

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

public async Task SetUser([FromBody] string userId)

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-16
      • 2017-03-14
      • 2011-10-21
      • 2011-12-11
      • 1970-01-01
      • 2017-11-18
      相关资源
      最近更新 更多