Я получаю данные 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);
}
Я предполагаю, что причина в том, что ваша подпись function
:
function CallAPI(controllerName, functionName, sendData, callback)
и вы звоните
CallAPI("Home", "Add", function (response) { ... })
Таким образом, вы никогда не отправляете данные в формате, ожидаемом MVC.
Я бы дважды проверить это, используя что-то вроде Fiddler и отлаживая ваш код JavaScript, используя ваши инструменты для браузеров.