2015-11-23 34 views
4

我有處理ASP.NET Web API默默地失敗反序列化(5.1.2版本)中的問題。我想反序列化來提出一個錯誤,但我無法找到它的配置。如何失敗的ASP.NET Web API反序列化時,類型不匹配

我的具體(簡化的)的情況下是這樣的。客戶端應用程序(AngularJS)將HTTP POST請求發送到ASP.NET Web API後端。作爲有效載荷有一串字符串:

["ABC100", "ABC200", "ABC300"] 

但是,服務器期待整數列表:

List<int> Ids { get; set; } 

什麼最終發生的是,反序列化失敗,則IDS列表將是空的並且沒有錯誤。

Ids: [] 

當然不匹配需要被固定爲好,但它似乎明顯,我認爲POST請求應該在這種情況下失敗。我怎樣才能使它成爲默認值?

+0

的JavaScript總是會返回一個'array',它不明白'名單'。 List是一個'C#'的東西。你期待'int',而客戶發送的值不是。 –

+1

在您的API方法中,您可以對數據執行任何類型的檢查(儘管這發生在反序列化之後)並手動返回HTTP 500:http://www.asp.net/web-api/overview/錯誤處理/異常處理 –

+0

@modal_dialog當然,我可以對Ids列表進行檢查,但它是空的非常有效。只是在客戶端發送數據但不匹配的情況下。 – merrr

回答

1

一個解決這個問題似乎在控制方法開始被檢查ModelState.IsValid產權:

[HttpPost] 
[Route("Stuff/Ids/")] 
public void PostStuff(List<int> Ids) 
{ 
    if(!ModelState.IsValid) 
     throw new Exception("ModelState is not valid."); 

    // Carry on... 
} 

的ModelState.IsValid是對我的問題描述的情況確實是假的。

的檢查可以通過出它創建一個動作過濾器進行全球性的。說明此例如可以在這篇文章中找到:Model Validation in ASP.NET Web API

相關問題