Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将任意json对象发布到webapi_C#_Json_Mongodb_Asp.net Web Api - Fatal编程技术网

C# 如何将任意json对象发布到webapi

C# 如何将任意json对象发布到webapi,c#,json,mongodb,asp.net-web-api,C#,Json,Mongodb,Asp.net Web Api,如何将json对象传递给webapi控制器(POST),而不将其映射到类,而是将其作为任意内容处理 因此,如果我从我的客户处这样传入: createRecord: function (model, data, callback, callbackParams) { var request = jQuery.ajax({ type: "POST", // default = GET, url: '/api/' + mo

如何将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" }
我的控制器能解析它吗?下次数据可能与该签名不匹配(例如:

在我的控制器中,我尝试过:

public HttpResponseMessage Post([FromBody]JObject value)
以及:

并且(因为这实际上是与mongo db一起工作的):


但是,对象映射器似乎希望映射到字符串以外的其他对象…

您可以使用post方法,该方法接收HttpRequestMessage以旁路传递模型绑定逻辑,并且您可以直接读取请求的内容:

    public HttpResponseMessage Post(HttpRequestMessage req)
    {
        var data = req.Content.ReadAsStringAsync().Result; // using .Result here for simplicity...
        ...

    }

顺便说一句,在JObject中采取的操作之所以不起作用,是因为在数据中用作“\u id”值的“ObjectId”(“…”)。

在您的输入中,
“\u id”:ObjectId(“5069f825cd4c1d590cddf206”)
破坏了服务器上的JSON物化。删除
ObjectId
并使用
“\u id”:“5069f825cd4c1d590cddf206”
适用于
JObject
以及
Dictionary

我们通过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的类似问题:

这很简单,您只需将Accept头放在“application/json”中即可。

感谢您的帮助-此响应和kxb的响应都很有用-将答案授予第一响应者
    public HttpResponseMessage Post(HttpRequestMessage req)
    {
        var data = req.Content.ReadAsStringAsync().Result; // using .Result here for simplicity...
        ...

    }
ajaxPost:

...
Content-Type: application/json,
data: {
          "name": "Jack", 
          "age": "12"
      }
...
[HttpPost]
public string DoJson2(dynamic data)
{
    string name = data.name;
    int age = data.age;

    return name;
}