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);
    }
});

在我的请求标头中发送的数据如下所示:

歌曲名称:[“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);
}

在这个实现中,我收到一个非空的 List 对象,但它始终是空的。我的错误是什么?

编辑:如果我这样发布而不是 GET 它工作正常。怎么会??

$.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

您应该尝试为您的 jQuery Ajax 请求使用设置为 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 回答