我使用自托管OWIN设置了一个测试命令行应用程序。 我有一个测试控制器,它按预期工作,在get请求上提供一个静态主页和两个JSON格式的值。
我正在使用JsonFormatter格式化所有结果。
我想从post请求中读取JSON数据。 我可以发送一个已接受的消息响应,但读取时数据始终为空。
// POST api/values
[HttpPost]
public HttpResponseMessage Post([FromBody]string myString)
{
Console.WriteLine("Terry Tibbs");
Console.WriteLine(myString);
return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
}
我在Chrome中使用Postman发布数据如下,但myString始终为空白。
POST /api/values HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: a966fa36-010d-3e2b-ad66-2f82dcb155ed
{
"myString": "This is new"
}
答案 0 :(得分:1)
阅读Parameter Binding in ASP.NET Web API
使用[FromBody]
要强制Web API从请求正文中读取简单类型,请添加 [FromBody] 属性参数:
public HttpResponseMessage Post([FromBody] string myString) { ... }
在此示例中,Web API将使用媒体类型格式化程序来读取 来自请求正文的
myString
的值。这是一个示例客户端 请求。POST api/values HTTP/1.1 User-Agent: Fiddler Host: localhost:8080 Content-Type: application/json Content-Length: 13 "This is new"
当参数具有[FromBody]时,Web API使用Content-Type标头 选择格式化程序。在此示例中,内容类型为 "应用/ JSON"并且请求正文是一个原始的JSON字符串(不是 JSON对象)。