2013-06-29 59 views
1

我想調用一個ASP.NET WebAPI方法,並通過類似於$.ajax POST請求的GET請求傳遞一個序列化的JavaScript對象。除了當JavaScript對象對於網絡有一個空值的時候,它工作得很好,然後它在URL中發送它,如/api/airings/get-airings?networks=,並且服務器將字符串[]顯示爲具有值爲null的單個項目!如果我刪除了network=,它就會像我期望的那樣在服務器上顯示爲空。

所以,似乎人們在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

這看起來像一個錯誤。請在這裏登錄一個問題:http://aspnetwebstack.codeplex.com/workitem/list/basic –

+0

希望它會在下一個版本中修復並期待屬性路由:-) – Timmerz

回答

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(','); 
相關問題