【问题标题】:MVC 4 APIController not receiving POST dataMVC 4 APIController 未接收 POST 数据
【发布时间】:2013-01-27 19:51:21
【问题描述】:

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

这是一个简单的 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 将“表单数据”显示为 clientId:A0001 - 这样看起来还可以吗?

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

当然很简单....提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这也不起作用 - 但是,我想发送复杂类型,所以宁愿通过传递对象来解决这个问题
    • @graemegets 你的路由是什么样的?你试过 Glimpse 了吗?
    • 将看看 Glimpse - 奇怪的是我将项目移动到我的笔记本电脑上(在笔记本电脑上签入然后签出),现在它可以工作了!猜有缓存问题
    【解决方案2】:

    尝试放弃contentType,不要stringify data

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2012-09-28
      • 2016-03-01
      • 2016-05-08
      相关资源
      最近更新 更多