webapi不会使用$ .param反序列化字符串数组

时间:2013-06-29 00:13:40

标签: c# javascript jquery asp.net-web-api

我正在尝试调用ASP.NET WebAPI方法,并通过类似于$.ajax POST请求的GET请求将其传递给序列化的JavaScript对象。除了当JavaScript对象具有网络的空值,然后它在像/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);

1 个答案:

答案 0 :(得分:0)

因此,为了解决这个问题,我将字符串数组更改为一个简单的字符串,并在其上执行.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(',');