我正在使用ASP.NET MVC 4 WebAPI构建我的第一个WebAPI。
必须使用带有utf-8的application / json ContentType发送请求作为字符集。
我的POST方法如下:
public HttpResponseMessage Post([FromBody]string value)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
每当我发送POST请求时,参数'value'为空。请求正文包含Json:{ "name":"test" }
。
我更喜欢将Post方法的参数设置为包含Json的字符串或者是JObject类型的字符串(来自JSON.NET库)。我该如何做到这一点?这甚至可能吗?
答案 0 :(得分:2)
最简单的方法是直接从Request.Content
抓取原始字符串:
public async Task<HttpResponseMessage> Post()
{
string value = await Request.Content.ReadAsStringAsync();
return new HttpResponseMessage(HttpStatusCode.OK);
}
有一种方法可以使ASP.NET Web Api将您的请求主体视为字符串内容,但为了做到这一点,内容必须是=value
格式,在您的情况下是这样的:
={ "name":"test" }
您可以通过以下jQuery代码实现类似的功能(例如):
$.post('api/values', '=' + JSON.stringify({ name: 'test' }));
在这种情况下,您可以使用问题中的签名。
最后,您可以选择创建自己的MediaTypeFormatter
来替换默认的JsonMediaTypeFormatter
,并始终将内容反序列化为JObject
。您可以详细了解如何创建和注册MediaTypeFormatter
here和here。