我從這個方法接收JSON數據:MVC參數從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);
}
確切的問題是什麼?參數沒有像你期望的那樣受到約束? – Shoe 2014-11-03 16:03:28
@Shoe Nope,該函數甚至沒有被調用,我得到一個資源未找到JavaScript錯誤。如果我更改JavaScript調用方通過查詢字符串發送,而不是json發佈數據,它雖然工作。 – Danicco 2014-11-03 16:06:05
嘗試將'System.Web.Http.HttpPost'更改爲'System.Web.Mvc.HttpPost' – Shoe 2014-11-03 16:10:23