0

技术背景 - 我们正在使用:

1) 带有 VS2012 的 asp.net 4.5 2) 用于构建单页应用程序 (SPA) 的 Durandal JS。3) Breeze JS 用于查询数据。

现在在我的 jquery ajax 调用中,我正在调用 Breeze Web API 控制器,如下所示:

    jsonData.push({
        "nodeType": vm.nodeType,
        "nodeDescription": vm.nodeDescription,
        "NodeDefs": ds.data()      // ds dataset is coming from a grid
    });        

    var jsonDataStr = JSON.stringify(jsonData);         CONVERT DATA TO JSON
    var jq = $.ajax({
        url: '/api/breeze/UpdateNode/',
        type: "PUT",
        dataType: "json",
        data:jsonDataStr,
        async: false,
    });

我的控制器看起来像这样:

    [HttpPut]
    public SaveResult UpdateNode(JObject saveBundle)
    {
        SaveResult saved = new SaveResult();
        return saved;
    }

但是,我从 jQuery FAILED EVENT 得到以下异常返回:

"ExceptionMessage":"没有 MediaTypeFormatter 可用于从媒体类型为 'application/x-www-form-urlencoded' 的内容中读取类型为 'JObject' 的对象。

所以我的主要问题是:如何使用正确的 JSON 数据成功调用我的 Breeze API 控制器?

美国东部时间下午 1:50 更新:如果我在我的 jquery ajax 调用中指定类型:“STRING”或“JSON”,在我的 c# Controller 方法中将我的参数类型定义为 STRING,则调用工作正常。但是,理想情况下,我想将此数据对象作为 JSON 传递,并且我的控制器应该正确处理它。

先谢谢了。

鲍勃

4

2 回答 2

0

您的控制器将需要此处提到的 [BreezeController] 属性http://www.breezejs.com/documentation/web-api-controller

于 2013-10-29T23:48:41.117 回答
0

我不得不将我的 javascript 代码更改为不使用 javascript 数组以及后续的 jsonData.push() 和 stringify()。

相反,我需要一个直接的 jsonData={} 对象,如下所示:

  var jsonData = JSON.stringify({
        "nodeType": vm.nodeType,
        "nodeDescription": vm.nodeDescription,
        "NodeDefs": ds._data     // gives me just the data from Kendo grid data source
    });

然后我能够成功地对我的控制器进行 ajax 调用,如下所示:

        var jq = $.ajax({
        url: '/api/breeze/UpdateNode',
        type: "post",
        dataType: "json",
        contentType: 'application/json',
        data: jsonData 
    });

一切都很好,我可以很好地在我的控制器中放置一个断点并接收有问题的 JObject 参数。

谢谢你。鲍勃

于 2013-10-30T18:39:51.597 回答