webapi获胜';t使用$.param反序列化字符串数组

本文关键字:param 反序列化 字符串 数组 使用 获胜 webapi | 更新日期: 2023-09-27 18:20:32

我正在尝试调用一个ASP.NET WebAPI方法,并通过类似于$.ajax POST请求的GET请求向它传递一个序列化的JavaScript对象。它运行良好,只是当JavaScript对象的Networks值为null时,它会像/api/airings/get-airings?networks=一样在URL中发送它,并且服务器显示字符串[]为具有null值的单个项!如果我删除network=,它在服务器上显示为null,正如我所期望的那样。

因此,人们似乎在jQuery中请求了关于这种行为的票证,但我想知道在不使用插件、重写$.param逻辑或干扰WebAPI ModelBinder的情况下我能做些什么。

http://bugs.jquery.com/ticket/8653

http://bugs.jquery.com/ticket/1814

public class ApiGetAiringsRequest
{
    public DateTime? DateStart { get; set; }
    public DateTime? DateFinish { get; set; }
    public string[] Networks { get; set; }
}
public HttpResponseMessage GetAirings([FromUri] ApiGetAiringsRequest request )
    ...
document.location.href = "/api/airings/get-airings?" + $.param(request);

webapi获胜';t使用$.param反序列化字符串数组

所以为了解决这个问题,我将字符串数组更改为一个简单的字符串,并对其进行.split。

var serialize = function(obj)
{
    var str = [];
    for (var p in obj)
    {
        if (obj[p])
            str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
    }
    return str.join("&");
};
$.get('/api/airings/get-airings?' + serialize(request));

C#

var networks = (request.Networks??"").Split(',');