Недавно я добавил контроллер 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?