如何将json对象传递给webapi控制器(POST)并且而不是有一个类来映射它,而是将其作为任意内容处理?
所以如果我这样从我的客户那里传入:
createRecord: function (model, data, callback, callbackParams) {
var request = jQuery.ajax({
type: "POST", // default = GET,
url: '/api/' + model + '/',
data: data,
contentType: 'application/json',
success: function (msg) {
$('#results').text(msg);
if (callback) // only fire a callback if it has been specified
callback(msg, callbackParams);
},
error: function (jqXHR, textStatus) {
alert('Request failed: ' + textStatus);
}
});
}
和数据类似:
{ "_id" : ObjectId("5069f825cd4c1d590cddf206"), "firstName" : "John", "lastName" : "Smith", "city" : "Vancouver", "country" : "Canada" }
我的控制器可以解析它吗?下次数据可能与该签名不匹配(例如:
{ "_id" : ObjectId("5069f825cd4c1d56677xz6"), "company" : "Acme" }
在我的控制器中,我尝试过:
public HttpResponseMessage Post([FromBody]JObject value)
和
public HttpResponseMessage Post([FromBody]string value)
和(因为这实际上是与mongo db一起使用):
public HttpResponseMessage Post([FromBody]BsonDocument value)
但看起来对象映射器想要映射到字符串以外的东西......
答案 0 :(得分:23)
您可以通过传递模型绑定逻辑来获取接收HttpRequestMessage的post方法,并且可以直接读取请求的内容:
public HttpResponseMessage Post(HttpRequestMessage req)
{
var data = req.Content.ReadAsStringAsync().Result; // using .Result here for simplicity...
...
}
顺便说一下,JObject中的操作不起作用的原因是因为'ObjectId(“...”)'在数据中用作“_id”的值... < / p>
答案 1 :(得分:19)
我们通过jquery传递json对象,并在动态对象中解析它。它工作正常。这是示例代码:
ajaxPost:
...
Content-Type: application/json,
data: {
"name": "Jack",
"age": "12"
}
...
的WebAPI:
[HttpPost]
public string DoJson2(dynamic data)
{
string name = data.name;
int age = data.age;
return name;
}
关于stackoverflow的类似问题: WebAPI Multiple Put/Post parameters
答案 2 :(得分:2)
在您的输入中,"_id": ObjectId("5069f825cd4c1d590cddf206")
正在打破服务器上的JSON实现。删除ObjectId
并使用"_id" : "5069f825cd4c1d590cddf206"
适用于JObject
以及Dictionary<string, object>
答案 3 :(得分:-6)
这很简单,你只需要将Accept Header放到“application / json”。