将IEnumerable参数传递给WebAPI

Sco*_*ott 13 c# asp.net-mvc jquery asp.net-web-api

我开始使用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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是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) { }
                });
            }
        });
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 11

contentType: 'application/json, charset=utf-8',
Run Code Online (Sandbox Code Playgroud)

应该成为(内容类型和字符集之间的分隔符是分号,而不是逗号):

contentType: 'application/json; charset=utf-8',
Run Code Online (Sandbox Code Playgroud)

和:

public void Post([FromUri] IEnumerable<int> values)
Run Code Online (Sandbox Code Playgroud)

应该成为(POST请求中没有Uri参数):

public void Post(IEnumerable<int> values)
Run Code Online (Sandbox Code Playgroud)

现在你很高兴假设newArray(你在这里没有显示)是一个整数数组:

newArray = [ 1, 2, 3 ]
Run Code Online (Sandbox Code Playgroud)