我正在使用Durandal创建一个应用程序,其中WebAPI作为服务器。我有一个KendoUI网格,可以正确显示来自服务器的数据并正常运行,直到调用POST或PUT方法。这是我的GET方法:
您可以看到该数据绑定到UI(使用Durandal中的data-bind extensibility更改为kendo绑定):
然后我编辑Grid中的数据,它将请求中的更改传递给服务器,如此Fiddler结果中所示:
在服务器端,我无法获取从客户端传递的数据以绑定到我作为POST或PUT上的方法的参数放置的任何内容。
我意识到这是几种不同的故障排除技术(例如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
答案 0 :(得分:6)
看起来好像是form-urlencoded
与json
格式的混合 - 如果您查看已发送models=
的已解码字符串,然后是urlencoded JSON对象。
答案 1 :(得分:0)
根据我的经验,我认为您的PUT终点声明需要如下所示:
[HttpPut]
public void Put([FromBody]IEnumerable<Product> models) { }
因此,您需要FromBody属性,因为您的产品数组位于正文中(我认为?)而不是请求的网址。