Привязка параметров MVC из JSON к нескольким параметрам

1

Я получаю данные 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
    @Shoe Нет, функция даже не вызывается, и я получаю сообщение об ошибке «ресурс не найден» в javascript. Если я изменю вызывающую функцию javascript для отправки через строку запроса, а не для публикации данных через json, это сработает.
Показать ещё 4 комментария
Теги:
asp.net-mvc
asp.net-mvc-4

1 ответ

0

Я предполагаю, что причина в том, что ваша подпись function:

function CallAPI(controllerName, functionName, sendData, callback)

и вы звоните

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

Таким образом, вы никогда не отправляете данные в формате, ожидаемом MVC.

Я бы дважды проверить это, используя что-то вроде Fiddler и отлаживая ваш код JavaScript, используя ваши инструменты для браузеров.

  • 0
    Это была опечатка, я случайно забыл ввести это в вопросе (но это в коде). Сожалею! (Я знаю, что это работает, у меня есть различные другие вызываемые функции, и они работают, но это количество продолжает расти, и я хочу найти способ справиться, не создавая новые модели для всех запросов)
  • 0
    @Danicco Я предлагаю обновить вопрос в этом случае! :П

Ещё вопросы

Сообщество Overcoder
Наверх
Меню