2013-05-14 26 views
3

我使用ASP.NET MVC 4 WebAPI构建了我的第一个WebAPI。ASP.NET中的ContentType应用程序/ json WebAPI

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

我POST方法是这样的:

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

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

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

+1

当然。首先,将值重命名为'name' – AFD 2013-05-14 11:10:17

+0

这不起作用。该参数的值仍然为空。 Json最终会像{“name1”:[{},{}],“name2”:[],“name3”:“some value”}。我不希望Json被系统本身反序列化为一个对象。我想自己做那件事。 – Grant 2013-05-14 11:24:57

+0

如果要控制反序列化,请为JSON添加自定义媒体类型格式化程序。否则,是否可以选择将身体作为x-www-form-urlencoded字符串发送,然后从中创建对象? – 2013-05-14 11:29:51

回答

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。你可以阅读更多关于创建和注册MediaTypeFormatterherehere

+0

是的,这是有效的!谢谢! – Grant 2013-05-14 12:07:46

相关问题