3

我正在使用 ASP.NET MVC 4 WebAPI 构建我的第一个 WebAPI。

请求必须使用 application/json ContentType 以 utf-8 作为字符集发送。

我的 POST 方法如下所示:

    public HttpResponseMessage Post([FromBody]string value)
    {
        return new HttpResponseMessage(HttpStatusCode.OK);
    }

每当我发送 POST 请求时,参数“value”为空。请求正文包含 Json: { "name":"test" }

我更喜欢将 Post 方法的参数设置为包含 Json 的字符串或 JObject 类型(来自 JSON.NET 库)。我该如何做到这一点?这甚至可能吗?

4

1 回答 1

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 您可以在此处此处阅读有关创建和注册的更多信息。

于 2013-05-14T11:48:29.063 回答