asp.net OWIN保存JSON帖子数据

时间:2016-06-28 13:45:30

标签: asp.net json httprequest owin httpresponse

我使用自托管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"
}

1 个答案:

答案 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对象)