来自JSON的Web API模型绑定

时间:2013-05-04 15:52:31

标签: json asp.net-web-api kendo-ui model-binding durandal

我正在使用Durandal创建一个应用程序,其中WebAPI作为服务器。我有一个KendoUI网格,可以正确显示来自服务器的数据并正常运行,直到调用POST或PUT方法。这是我的GET方法: enter image description here

您可以看到该数据绑定到UI(使用Durandal中的data-bind extensibility更改为kendo绑定): enter image description here

然后我编辑Grid中的数据,它将请求中的更改传递给服务器,如此Fiddler结果中所示: enter image description here

在服务器端,我无法获取从客户端传递的数据以绑定到我作为POST或PUT上的方法的参数放置的任何内容。 enter image description here

我意识到这是几种不同的故障排除技术(例如Durandal,KnockoutJs,Kendo DataBinding和WebAPI),但我认为基础工作正在运行,数据被检索并绑定到UI,并在更改时回发,但是WebAPI端点无法绑定到数据。

如何通过WebAPI中的ModelBinding结构获取传递的“models”数组?

UPDATE-这是一个有用的JSFiddle,它为我提供了正确的内容类型:http://jsfiddle.net/Xhrrj/1/

new kendo.data.DataSource({ transport: { read: { type: "POST", url: "../cccs/service.svc/SupplierSearch", contentType: "application/json; charset=utf-8", dataType: 'json'...

这来自Telerik论坛here

2 个答案:

答案 0 :(得分:6)

看起来好像是form-urlencodedjson格式的混合 - 如果您查看已发送models=的已解码字符串,然后是urlencoded JSON对象。

答案 1 :(得分:0)

根据我的经验,我认为您的PUT终点声明需要如下所示:

[HttpPut]
public void Put([FromBody]IEnumerable<Product> models) { }

因此,您需要FromBody属性,因为您的产品数组位于正文中(我认为?)而不是请求的网址。