我收到了这样的请求。

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接口是这样的:

[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使用以下规则来绑定参数:


如果参数是“简单”类型,则Web API尝试获取该值
来自URI。
简单类型包括.NET基本类型(int,bool,double和
依此类推),再加上TimeSpan,DateTime,Guid,十进制和字符串,再加上
具有可以从字符串转换的类型转换器的任何类型。
对于复杂类型,Web API尝试从消息中读取值
正文,使用媒体类型的格式化程序。
如果您的URI中有原始类型,或者您有复杂的
输入正文,则无需添加任何属性(不是
[FromBody]或[FromUri])。
最多允许一个参数从消息正文中读取。所以
这将不起作用:



  公共HttpResponseMessage Post([FromBody] int id,[FromBody]
  字符串名称){...}


http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

https://blogs.msdn.microsoft.com/jmstall/2012/04/16/how-webapi-does-parameter-binding/

现在的解决方案

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



  移除Desc

10-06 09:26