2013-09-27 43 views
0

我們調用web-API控制器如下: -的Web API deserialising AJAX發佈空值是 「空」 的字符串

var foo = ...; // may be null. 
... 

var data = { Foo: foo, ... }; 
$.ajax({ 
    url: ... 
    type: 'POST' 
    data: data, 
    }); 

當數據deserialised在服務器上爲我們的模型: -

public class BarController : ApiController 
{ 
    public void Post(Bar bar) 
    { 
    ... 
    } 
} 

public class Bar 
{ 
    public string Foo { get; set; } 
    ... 
} 

"null"綁定到Foo而不是null

對於我們使用的商業原因,使用www-form-urlencoded內容類型而非JSON非常重要。

替換內置的FormUrlEncodedMediaTypeFormatter似乎不可行,因爲它依賴於許多內部類(特別是它實例化了一個FormUrlEncodedParser,並且似乎沒有掛鉤來擴展其行爲)。

問題似乎是FormUrlEncodedParser將輸入解釋爲"null"而不是null

有沒有辦法讓web API綁定null而不是"null"到Foo?

或者,有沒有辦法讓jquery省略data的任何null值的密鑰傳遞給$.ajax

+0

您的控制器操作採用哪種模型作爲參數,它看起來像簽名? –

+0

爲什麼不只是遺漏你想成爲'null'的屬性呢? –

+0

該對象正在其他地方生成,並且該屬性不總是爲空。 –

回答

0

作爲暫時的解決辦法,我們通過對象循環和刪除其值是null我們稱之爲$.ajax前任意鍵: -

var data = ...; 

for (i in data) { 
    if (!data [i]) { 
     delete data [i]; 
    } 
} 

$.ajax({ 
    url: ... 
    type: 'POST' 
    data: data, 
    }); 

我仍然希望有一個整潔的地方來處理這個問題,雖然。