Web Api Rest方法接收包装在另一个JObject中的JObject作为键值

时间:2014-09-03 14:40:16

标签: json rest post asp.net-web-api sencha-touch

我遇到了从sencha touch客户端发送到其余web abi Web服务的json问题。

当我从Sencha发送POST请求时,它看起来像:

var paramsData = Ext.encode({
            FormId: '5',
            WorkcardId: 'a1234',
            FormDataSet: 'dataset'
        });
Ext.Ajax.request({
            url: JsonTestClient.app.webserviceUrl',
            scope: this,
            method: 'POST',
            headers: { 'Authorization': 'Bearer ' + jsonToken.access_token },
            params: paramsData,
            contentType: "application/json;charset=utf-8",
            success: function (response, options) {
                //
            },
            failure: function (response, options) {
                //
            }
        });

和paramsData值是:" {" FormId":" 5"," WorkcardId":" a1234",& #34; FormDataSet":"数据集"}"

但是在方法

中的WebApi RestService上
[System.Web.Http.HttpPost]
        public string SaveForm([FromBody] JObject jsonData)
        {
            //
        }

jsonData看起来像

{
  "{\"FormId\":\"5\",\"WorkcardId\":\"a1234\",\"FormDataSet\":\"dataset\"}": ""
}

所以看起来我的初始json被包装在另一个对象中并被用作键值。

任何想法可能出错? 感谢。

2 个答案:

答案 0 :(得分:0)

从客户端站点(sencha),您可以验证http请求正文中的JSON吗?

从服务器端,您是否已编写该方法的所有合同,例如它可以接受哪种参数?

           RequestFormat = WebMessageFormat.Json,

上面的属性应该放在接口内(或者如果你没有接口的话,直接在class里面),它定义了关于输入参数的合约。

答案 1 :(得分:0)

感谢kasharma,我注意了如何在sencha触摸请求中查看FormData。

从那我发现了一个解决方案。我不得不补充一下 jsonData:paramsData, 发布请求