MVC参数从JSON绑定到多个参数

时间:2014-11-03 15:58:29

标签: c# asp.net-mvc json asp.net-mvc-4

我从这种方法接收JSON数据:

function CallAPI(controllerName, functionName, sendData, callback) {
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange = function () {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                var response = JSON.parse(ajax.responseText);
                callback(response);
            }
            else {
                callback();
            }
        }
    }
    ajax.open("POST", "http://" + window.location.host + "/API/" + controllerName + "/" + functionName, true);
    ajax.setRequestHeader('Content-Type', 'application/json');
    ajax.send(JSON.stringify(sendData));
}

function someRequest() {
    var data = {};
    data.userID = 1;
    data.someValue = 20;
    CallAPI("Home", "Add", data, function (response) {
        if(response) {
            alert(response.Message); //This property always exist
        }
        else {
            alert("internet/connection error.");
        }
    });
}

我的控制器是:

[System.Web.Http.HttpPost]
public HttpResponseMessage Add(int userID, int someValue)
{
    //Here!
    return Request.CreateResponse(HttpStatusCode.OK, new GenericResponseAPI() { Status = false, Message = "Generic Message." });
}

我可以创建一个模型,MVC会相应地绑定它,但我有很多这样的请求,我不想创建各种模型(或者包含所有属性的大模型),而是这些简单的函数有这样的基本类型参​​数。

如果能够使用上面的控制器功能,而不更改传入消息的内容类型,我需要做什么?

修改:我找到了解决方法:

[System.Web.Http.HttpPost]
public HttpResponseMessage Add(JObject jObject)
{
    int userID = (int)jObject.getValue("userID").ToObject(typeof(Int32));
    int someValue = (int)jObject.getValue("someValue").ToObject(typeof(Int32));

    return Request.CreateResponse(HttpStatusCode.OK);
}

1 个答案:

答案 0 :(得分:0)

我想原因是你的function签名是:

function CallAPI(controllerName, functionName, sendData, callback)

你正在打电话

CallAPI("Home", "Add", function (response) { ... })

因此,您实际上从未以MVC期望的格式发送数据。

我会使用类似Fiddler的内容并使用浏览器dev-tools调试JavaScript代码来仔细检查。