gpt4 book ai didi

c# - WebAPI [FromBody] 始终为空

转载 作者:行者123 更新时间:2023-11-30 13:54:50 24 4
gpt4 key购买 nike

我收到了这样的请求。

POST /API/Event?EventID=15&UserID=1&Severity=5&DeptID=1&FlowTag=CE HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8088
Content-Length: 9
Expect: 100-continue
Connection: Keep-Alive


HTTP/1.1 100 Continue


Desc=test

而我的 WebAPI 接口(interface)是这样的:

[Route("API/Event"), HttpPost]
public IHttpActionResult StationCreateWorkItem(long EventID, long UserID, int Severity,
long DeptID, string FlowTag, [FromBody] string Desc)

但是,我的 Desc 参数始终为 NULL。如果我无法在 WebAPI (OWIN) 中使用 [FromBody],请问如何检索正文内容

抱歉,我无法更改传入消息,因为它是由另一家公司开发的。

最佳答案

默认情况下,Web API 使用以下规则绑定(bind)参数:

  • 如果参数是“简单”类型,Web API 会尝试获取值来自 URI。
  • 简单类型包括 .NET 原始类型(intbooldouble、等等),加上 TimeSpanDateTimeGuiddecimalstring,加上任何带有类型转换器的类型,可以从字符串。
  • 对于复杂类型,Web API 会尝试从消息中读取值正文,使用媒体类型格式化程序。
  • 如果您在 URI 中有一个原始类型,或者如果您有一个复杂的类型在正文中输入,那么你不必添加任何属性(既[FromBody][FromUri])。
  • 最多允许从消息正文中读取一个参数。所以这是行不通的:

    public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }

Parameter Binding in ASP.NET Web API (MSDN)

How WebAPI does Parameter Binding (MSDN)

现在的解决方案:

POST /API/Event?EventID=15&UserID=1&Severity=5&DeptID=1&FlowTag=CE HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8088
Content-Length: 9
Expect: 100-continue
Connection: Keep-Alive

HTTP/1.1 100 Continue

=test

removed Desc

关于c# - WebAPI [FromBody] 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39030314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com