如何将任意 json 对象发布到 webapi
Posted
技术标签:
【中文标题】如何将任意 json 对象发布到 webapi【英文标题】:how to post arbitrary json object to webapi 【发布时间】:2012-11-14 10:24:26 【问题描述】:我如何/是否可以将 json 对象传递给 webapi 控制器 (POST) 并且 没有 有一个类可以将其映射到,而是将其作为任意内容处理? p>
所以如果我像这样从我的客户那里传递过来:
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)
但看起来对象映射器想要映射到字符串以外的东西......
【问题讨论】:
【参考方案1】:你可以让你的 post 方法接受一个 HttpRequestMessage 来绕过模型绑定逻辑,你可以直接读取请求的内容:
public HttpResponseMessage Post(HttpRequestMessage req)
var data = req.Content.ReadAsStringAsync().Result; // using .Result here for simplicity...
...
顺便说一句,JObject 中的操作不起作用的原因是因为 'ObjectId("...")' 在您的数据中用作“_id”的值...
【讨论】:
感谢 - 这个和 kxb 的响应都很有用 - 将答案授予第一响应者【参考方案2】:我们通过 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;
*** 上的类似问题: WebAPI Multiple Put/Post parameters
【讨论】:
【参考方案3】:在您的输入中,"_id": ObjectId("5069f825cd4c1d590cddf206")
是破坏服务器上 JSON 实现的原因。删除ObjectId
并使用"_id" : "5069f825cd4c1d590cddf206"
与JObject
以及Dictionary<string, object>
一起使用
【讨论】:
【参考方案4】:很简单,只要把Accept Header放到"application/json"即可。
【讨论】:
以上是关于如何将任意 json 对象发布到 webapi的主要内容,如果未能解决你的问题,请参考以下文章
如何将 MongooseMap 转换为 JSON 对象以将其从 Node js 发送到 React?
Restkit如何将任意json(键可能会超时更改)映射到NSDictionary
如何将带有自定义标头的任意 JSON 数据发送到 REST 服务器?