2013-10-29 23 views
0

技术背景 - 我们使用:jQuery的AJAX调用ASP.NET MVC控制器返回一个MediaTypeFormatter例外

1)asp.net 4.5与VS2012 2)迪朗达尔JS构建单页,应用程序(的SPA )。 3)Breeze JS查询数据。

现在,在我的jQuery Ajax调用,我打电话到微风的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失败事件返回以下异常:

“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为'application'的内容读取'JObject'类型的对象上/ X WWW的窗体-urlencoded”。

所以我的主要问题是:如何使用正确的JSON数据成功调用我的Breeze API控制器?如果我在我的jquery ajax调用中指定类型:“STRING”或“JSON”,在我的c#Controller方法中将我的参数类型定义为STRING,则调用可以正常工作。不过,理想情况下,我想将此数据对象作为JSON传递,而我的控制器应该正确处理它。

谢谢先进。

鲍勃

回答

0

我不得不改变我的javascript代码不使用JavaScript数组和subsequenst jsonData.push()和字符串化() 。

相反,我需要一个直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参数。

谢谢。 Bob

相关问题