2013-02-18 28 views
0

我有一個簡單的WebAPI應用程序。在我的控制,我有:爲什麼我沒有收到我的WebAPI中的反序列化數據?

[HttpPost] 
public ActionResult DoSomeWork(string stringParam, DTOObject dto) 
{ 
    // Some work gets done in here 
} 

我有一個控制檯應用程序這樣做:

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(_context); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

var response = client.PostAsJsonAsync("ControllerPath/DoSomeWork", new object[]{someString, dtoObject}).Result; 

我沒有收到任何錯誤。當我的斷點在控制器內部命中時,它顯示字符串進入NULL,並且DTO即將完全填充,但具有默認值(1/1/1900s,空值等)。我覺得控制器沒有正確地反序列化這個對象,但我對如何解決這個問題感到不知所措。有什麼想法嗎?

+0

在這種情況下使用的好工具是提琴手(免費下載)。它將自己設置爲網絡代理,您可以看到每個請求和服務器響應。在這種情況下,您可以更輕鬆地查看客戶端應用程序傳輸的確切數據。 – DiskJunky 2013-02-18 21:25:16

+1

這可能不是您要查找的方法,但我通常堅持使用'string'參數和'Json.Decode()'和'Json.Encode()'來進行反序列化。我只是覺得它更乾淨。 此外,我建議從WebApi控制器返回一個HttpResonseMessage,以便您可以控制標題(正確的響應代碼等)。 – 2013-02-18 21:28:38

+0

@DiskJunky - 在這種情況下,我無法使用Fiddler,因爲它現在位於同一個框中。 – jermny 2013-02-18 21:32:38

回答

1

解決方案是因爲我的控制器不是ApiController。一旦我將控制器更改爲從ApiController而不是Controller繼承,那麼所有工作都沒有問題。

相關問題