ASP.NET WebAPI中的ContentType application / json

时间:2013-05-14 11:02:12

标签: json asp.net-web-api

我正在使用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库)。我该如何做到这一点?这甚至可能吗?

1 个答案:

答案 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 herehere