2013-04-09 104 views

回答

13

返回HttpResponseMessage當您嘗試將控制器層用作HTTP協議和內部.Net服務之間的轉換時非常有用。它允許直接控制HTTP有效負載和標題。它可以很容易地返回202,204,304,303響應。它可以很容易地設置緩存標題。您可以明確控制響應的媒體類型。

通過返回一個對象,可以有效地爲您的架構添加一個「什麼都不做」的層。考慮......

public Foo Get(int id) { 
    return _fooRepository.GetFoo(id) 
} 

這種方法的目的是什麼?它增加了什麼價值?至少在MVC的土地上,控制者具有匹配模型和視圖的角色。

當您從APIController返回對象時,必須使用一組特定於Web API/MVC的抽象間接影響HTTPResponseMessage,並且在HTTP世界中沒有相應的概念。格式化程序,ActionFilters,ModelBinders和HttpResponseException都是基礎設施,旨在允許框架在幕後處理HTTP請求和響應消息。

直接返回HttpResponseMessage要求您的控制器方法執行必要的工作以返回所需的HTTP消息。

我不相信它會增加您的應用程序的複雜性,它只會使正在發生的事情變得可見。

問題的關鍵在於是否要將Web API用作「通過HTTP進行遠程對象」框架(在這種情況下,我還會看看ServiceStack),還是希望利用HTTP作爲應用程序協議。

+1

我完全同意,也許爲了分離擔心爲什麼沒有服務層(強類型方法)和web服務層(ASP.NET WEB API),所以服務層可以很容易地被Winform,WPF,Console使用並測試項目並通過ASPNET WebAPi作爲web服務公開 – 2013-12-03 13:57:26

相關問題