MVC和WebApi控制器具有不同的解析行为

时间:2019-07-07 19:14:24

标签: .net asp.net-mvc asp.net-web-api

我最近在asp.net项目中在现有的MVC控制器旁边添加了一个webapi控制器。我这样做是为了允许Swashbuckle之类的功能,这些功能是常规MVC API控制器所不具备的。

但是,我注意到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

当原始javascript数据对象作为ajax调用中的data参数发送时,WebApi方法起作用。因此,我目前唯一能想到的就是编写一段代码,这些代码采用$('form').serialize()$('form').serializeObject() jQuery结果,并根据它们生成一个javascript数组。但是,看来这应该已经解决了。

有人知道我将如何修改WebApi控制器,使其像MVC控制器一样接受查询字符串列表注释吗?

0 个答案:

没有答案