Контроллеры MVC и WebApi имеют разное поведение при разборе - PullRequest
0 голосов
/ 07 июля 2019

Недавно я добавил контроллер webapi вместе с моими существующими контроллерами MVC в проекте asp.net.Я сделал это, чтобы разрешить такие функции, как Swashbuckle, которые не были доступны с обычными контроллерами API MVC.

Однако я заметил, что контроллеры WebApi не анализируют объекты в списке так же, как контроллеры MVC.

Этот шаблон работает для контроллеров MVC для отправки данных формы с помощью AJAX.

<body>
    <form action="cart/additems" method="post" id="add-form">
        <input type="hidden" name="items[0].Id" value="de63da9b-f4c8-4727-9ef8-0bae8a538503" />
        <input type="hidden" name="items[0].Quantity" value="1" />
        <input type="hidden" name="items[1].Id" value="de63da9b-f4c8-4727-9ef8-0bae8a538503" />
        <input type="hidden" name="items[1].Quantity" value="1" />
        <button type="submit" class="button">ADD</a>
    </form>
    <a href="#" id="link-click">click me</a>
</body>

<script>
    $('#link-click').click(function() {
        $.ajax({
            url: '/cart/additems',
            type: 'post',
            data: $('#add-form').serialize(),
            success: function () { }
        });
    });
</script>

И соответствующий метод контроллера MVC

public ActionResult AddItems(List<OrderItem> items)
{
    ...
}

Когда используется контроллер MVCпараметр List<OrderItem> items заполнен правильно.Однако, когда я переключаюсь на WebApi с той же сигнатурой метода, items заполняется неправильно.Я пробовал много вещей, таких как добавление атрибутов [FromUri] и [FromBody] и изменение с post на get.

Метод WebApi работает, когда необработанный объект данных javascript отправляется какПараметр данных в вызове AJAX.Итак, единственное, что я могу сейчас сделать, - это написать кусок кода, который принимает результаты * jQuery $('form').serialize() или $('form').serializeObject() и создает из них массив javascript.Однако, похоже, что это уже решенная проблема.

Кто-нибудь знает, как я могу изменить контроллер WebApi, чтобы он принимал аннотацию списка строк запроса так же, как это делал контроллер MVC?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...