2

次のように、GUID のようなオブジェクトのコレクションを MVC コントローラーに送信しています。

$.ajax({
    type: 'GET',
    url: 'http://localhost:61975/Song/GetByIds',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: {
        songIds: JSON.stringify(songIds)
    },
    success: function (data) {
    },
    error: function(error) {
        console.error(error);
    }
});

リクエスト ヘッダーで送信されるデータは次のようになります。

songIds:["6cb44f55-9fd5-4540-9b11-75ccce816d67"]

私のMVC3コントローラーメソッドは次のようになります。

[HttpGet]
public ActionResult GetByIds(List<Guid> songIds)
{
    SongManager songManager = new SongManager(SongDao, PlaylistDao, PlaylistItemDao);
    IList<Song> songs = songManager.GetByIds(songIds);
    return new JsonDataContractActionResult(songs);
}

この実装では、null 以外の List オブジェクトを受け取りますが、常に空です。私の間違いは何ですか?

編集: GET の代わりにこのように POST すると、正常に動作します。どうして??

$.ajax({
    type: 'POST',
    url: 'http://localhost:61975/Song/GetByIds',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        songIds: songIds
    }),
    success: function (data) {
        loadedSongs = loadedSongs;
        if (callback) {
            callback(data);
        }
    },
    error: function(error) {
        console.error(error);
    }
});
4

1 に答える 1

7

jQueryAjaxリクエストにはtrueに設定された「従来の」オプションを使用してみてください。

詳細については、ドキュメントを参照してください:http: //api.jquery.com/jQuery.ajax/

また、JSON.Stringify部分も削除する必要があります。

これを試してみて、うまくいったかどうか教えていただけますか?私は自分の側でテストを行いましたが、問題なく動作します。

$.ajax({
    type: 'GET',
    url: 'http://localhost:61975/Song/GetByIds',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    traditional: true, //// traditional option to true
    data: {
       songIds: songIds  /// no JSON.stringify
    },
    success: function (data) {
    },
    error: function(error) {
      console.error(error);
    }
});
于 2012-12-20T04:18:59.363 に答える