Передача массива целых чисел в метод webapi

Я пытаюсь передать массив int, но не могу получить значение в методе webapi

var postData = { "deletedIds": deletedIds };

    $.ajax({
        type: "DELETE",
        traditional: true,
        dataType: 'json',
        contentType: 'application/json',
        cache: false,
        url: "/api/Management/Models",
        data: JSON.stringify(postData),
        success: ModelDeleted,
        error: ModelNotDeleted
    });

и в apiController:

[HttpDelete]
        public bool DeleteModel(int[] deletedIds)
        {
            return modelsRepository.DeleteModels(deletedIds);
        }

person Muhammad Alaa    schedule 04.05.2013    source источник
comment
Я попытался удалить JSON.stringify, но все еще не работает   -  person Muhammad Alaa    schedule 05.05.2013


Ответы (3)


Ваш код выглядит довольно хорошо для меня. Пожалуйста, определите структуру объекта «deletedIds». одно из предложений - использовать новый объект Array () для инициализации свойства deletedIds и удаления JSON.stringify (). Аналогичный вопрос задан здесь.

ИЗМЕНИТЬ

Веб-API поддерживает анализ данных содержимого различными способами, но не работает с несколькими опубликованными значениями содержимого. Решением вашей проблемы может быть создание ViewModel со свойством типа int []. Как и код ниже,

public class SimpleViewModel
{
    public int[] deletedIds{ get; set; }
}

//Controller
[HttpDelete]
    public bool DeleteModel(SimpleViewModel deletedIds)
    {
        return modelsRepository.DeleteModels(deletedIds.deletedIds);
    }

и используйте его как тип параметра.

person Shashank    schedule 04.05.2013
comment
Я попытался использовать новый массив, но по-прежнему получил значение null в параметре метода webapi - person Muhammad Alaa; 04.05.2013
comment
Спасибо за ваш ответ, но вопрос, на который вы ссылались, не совпадает с моим кодом, который работает нормально, когда я использую метод действия в обычном контроллере, но когда URL-адрес указывает на webapi, он не может получить данные - person Muhammad Alaa; 04.05.2013
comment
Используйте firebug для проверки данных публикации. - person Shashank; 04.05.2013
comment
данные в порядке на стороне клиента, но проблема в том, что webapi использует другую привязку модели, чем mvc - person Muhammad Alaa; 04.05.2013
comment
украшение вашего параметра действия атрибутом [FromUri]. это сообщение может вам помочь. - person Shashank; 04.05.2013

Наконец, на основе ответа @Shashank это сработало, и код изменился как:

var deletedIds = new Array();

deletedIds.push(modelId);

var postData = { "DeletedIds": deletedIds };
$.ajax({
    type: "Delete",
    traditional: true,
    dataType: 'json',
    cache: false,
    url: "/api/Management/Models",
    data: postData,
    success: ModelDeleted,
    error: ModelNotDeleted
});

и apiController:

[HttpDelete]
        public bool DeleteModels(DeleteViewModel dvm)
        {
            return modelsRepository.DeleteModels(dvm.DeletedIds);
        }

и для DeleteViewModel:

public class DeleteViewModel
    {
        public int[] DeletedIds { get; set; }
    }
person Muhammad Alaa    schedule 05.05.2013

Я подозреваю, что бит строкового преобразования портит ваш объект - пробовали ли вы назначить его переменной, чтобы увидеть, соответствует ли это ожидаемому форматированию?

В данный момент вы все это натягиваете:

{ "deletedIds": deletedIds }

в то время как вы, вероятно, хотите отправить в теле сообщения следующее:

{ "deletedIds": JSON.stringify(deletedIds) }

person Joanna Derks    schedule 04.05.2013
comment
И в любом случае, если ваш метод контроллера ожидает целые числа, зачем их преобразовывать в JS? - person Joanna Derks; 04.05.2013
comment
stringify - это всего лишь попытка. Я создал метод тестовых действий в обычном контроллере, и он работает. mvc modelbinder работает, а webapi - нет !! - person Muhammad Alaa; 05.05.2013
comment
@MuhammadAlaa - опубликуйте точный JSON, который вы отправляете с запросом. Ударен ли вообще метод контроллера? Получаете пустой массив? - person Joanna Derks; 05.05.2013
comment
Я попытался отправить статические данные только для теста, я получил пустой массив в методе apicontroller - person Muhammad Alaa; 05.05.2013
comment
@Muhammad Alaa - разместите здесь JSON, который вы отправляете, статический или нет, иначе я не могу вам помочь - person Joanna Derks; 05.05.2013