15

私はWebAPIを使い始めており、ほとんどの場合、すべてが順調に進んでいます。ある特定の機能で問題が発生しています。これは、パラメータがIEnumerableタイプのみであるため、他とは異なります。

Post()関数の最初の行にブレークポイントを設定し、関数をヒットしていますが、「values」パラメーターのカウントは常に0です。クライアント側で入力されるパラメーターが0であることを確認しました。実際、整数の配列が含まれています。[FromUri]属性を削除すると、'values'パラメーターはカウント0ではなくNULLになります。

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({
    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) { }
                });
            }
        });
4

1 に答える 1

13
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 ]
于 2013-01-03T23:07:32.103 に答える