Подтвердить что ты не робот

Передача параметра IEnumerable в WebAPI

Я начинаю работу с WebAPI, и по большей части все идет хорошо. У меня проблема с одной конкретной функцией. Этот отличается от другого, потому что только параметр имеет тип IEnumerable.

Я установил точку останова в первой строке функции Post(), и я нажимаю на эту функцию, но параметр "values" ALWAYS имеет счет 0. Я проверил, что параметр, идущий на стороне клиента фактически содержит массив целых чисел. Если я удалю атрибут [FromUri], параметр "values" будет равен NULL вместо 0.

Как мне получить массив целых чисел в моей функции WebAPI?

Здесь функция WebAPI:

[System.Web.Mvc.HttpPost]
public void Post([FromUri] IEnumerable<int> values)
{
    if (values == null || !values.Any()) return;

    int sortorder = 1;
    foreach (int photoId in values)
    {
        _horseRepository.UpdateSortOrder(photoId, sortorder);
        sortorder++;
    }
}

Здесь вызов AJAX (используется функция сортировки JQuery UI Sortable):

$(".sortable").sortable({
    update: function (event, ui) {
                var newArray = $(".sortable").sortable("toArray");

                $.ajax({
                    url: '/api/photo',
                    type: 'POST',
                    contentType: 'application/json, charset=utf-8',
                    async: true,
                    dataType: 'json',
                    data: JSON.stringify(newArray),
                    complete: function (data) { }
                });
            }
        });
4b9b3361

Ответ 1

contentType: 'application/json, charset=utf-8',

должен стать (разделитель между типом контента и кодировкой является точкой с запятой, а не запятой):

contentType: 'application/json; charset=utf-8',

и

public void Post([FromUri] IEnumerable<int> values)

должно стать (в запросе POST нет параметров Uri):

public void Post(IEnumerable<int> values)

Теперь вам хорошо предположить, что newArray (который вы здесь не показывали) представляет собой массив целых чисел:

newArray = [ 1, 2, 3 ]