我从这种方法接收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);
}
答案 0 :(得分:0)
我想原因是你的function
签名是:
function CallAPI(controllerName, functionName, sendData, callback)
你正在打电话
CallAPI("Home", "Add", function (response) { ... })
因此,您实际上从未以MVC期望的格式发送数据。
我会使用类似Fiddler的内容并使用浏览器dev-tools调试JavaScript代码来仔细检查。