MVC 4 APIController未接收POST数据

时间:2013-01-27 19:51:22

标签: javascript jquery asp.net-mvc http-post

当然这已被多次处理过......但是......只是看不出我做错了什么!

这是一个简单的JS脚本,可以将数据发送回ApiController。

function WebCall(url,parameterObject, callBackFunction) {
this.callbackfunction = callBackFunction;
this.parameterObject = parameterObject;
this.url = url;
self = this;
this.GetData = function () {
 //self = this;   
    $.ajax({
        //dataType: "json",
        type: "POST",
        url: self.url,
        data: JSON.stringify(self.parameterObject),
        contentType: "application/json;charset=utf-8",
        success: function (data) {
            self.callbackfunction.call(this, data);
        },//self.GotData,
        error: function (xhRequest, ErrorText, thrownError)
        {
            alert("error : " + ErrorText)
        },
        complete: function () {},
    })


}

}

发送的数据(parameterObject)只是

var postData = {
            clientId: id
        }

控制器中的c#代码是:

 public class ClientPostObject
{
    public string clientId;
}

public class ClientDetailController : ApiController
{

    [HttpPost]
    public ClientDetailWidgetData GetClient(ClientPostObject clientObject)

    {
        return new ClientModel().GetClientDetail(clientObject.clientId);
    }
}

在Google Chrome开发者工具中,XH​​R将showinf'形式数据'作为clientId:A0001 - 所以看起来不错?

无论我尝试什么(我已经通过网络上的许多建议),帖子数据都不存在。

确保它的简单......提前致谢。

2 个答案:

答案 0 :(得分:1)

除非您计划在其他方面使用完整表单提交此方法,否则当您只是要求模型绑定器尝试绑定到复杂类型时没有任何意义使用一个属性。将您的方法签名更改为:

[HttpPost]
public ClientDetailWidgetData GetClient(int clientId) // or whatever type clientId represents
{
    return new ClientModel().GetClientDetail(clientId);
}

我还建议在某些时候添加Glimpse(http://getglimpse.com/),以便您可以看到应用的模型绑定和/或路由是如何工作的。

答案 1 :(得分:0)

尝试抛弃contentType而不是stringify data

$.ajax({
    type: "POST",
    url: self.url,
    data: self.parameterObject,
    success: function (data) {...},
    ...
});