c# - WebAPI [FromBody] 始终为空

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

我收到了这样的请求。

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/

相关文章:

c# - 如何在 ASP.NET 5 Beta 8 控制台应用程序中使用 EF7 并在没有 startup.cs 的情况下连接到 SQL Server?

c# - 在 C# 中使用时间跨度简化 if else 条件

azure - 不同平台的WEB API认证

客户端断开连接时,Asp.net Web API 自托管服务未处理异常

c# - 如果同一文件夹中有多个项目或多个 .cs 文件,如何编译 dotnet 项目

c# - 自动处理扩展方法是否合理?

c# - 如何从 AuthorizeAttribute 自定义类的 HttpActionContext 获取 cookie?

azure - 将 MVC 授权属性与使用 Azure Active Directory + OWIN 的角色结合使用

Owin UseStaticFiles 不尊重 RequestPath

asp.net-mvc - 我的 MVC 5 模板中没有 ApplicationRoleManager 类