2012-11-29 42 views
3

利用這個參考 - https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters這是處理servicestack中HEAD請求的代碼嗎?

現在在我目前的執行任何傳入HEAD請求收到一個404的StatusCode。我想返回200作爲HEAD請求的狀態碼,所以客戶端會進一步做出實際輸出的GET請求。

顯然我下面的代碼是錯誤的APPHOST仍然返回404,請大家指正。

 this.RequestFilters.Add((httpReq, httpResp, requestDto) => 
     { 

     }); 

     this.ResponseFilters.Add((req, res, dto) => 
     { 
      if (req.HttpMethod == "HEAD") res.StatusCode = 200; 
     }); 

問題2:對於AppHost中定義的所有路由,這個單獨的代碼實現是否足夠。

Routes.Add<dto1>("/GetMethod1", "GET"); 
Routes.Add<dto1>("/GetMethod1/Id/{ID}", "GET"); 
Routes.Add<dto2>("/GetMethod2", "GET"); 
Routes.Add<dto2>("/GetMethod2/Id/{ID}", "GET"); 

感謝

+0

您正在使用什麼版本ServiceStack的?新的API設計現在可讓您處理任何HTTP動詞,而無需使用自定義過濾器。 – kampsj

+0

ServiceStack - 3.9.4 ServiceStack.Common - 3.9.4 ServiceStack.Interface - 3.9.0 ServiceStack.OrmLite - 3.95 ServiceStack.ServiceInterface - 1.0 ServiceStack.Text - 3.9.5 – user836107

+0

3.9。 4很老。 – mythz

回答

4

它看起來像您使用的是舊版本ServiceStack的,所以我第一個建議升級到最新版本。

除此之外處理HEAD或其他不常見的HTTP方法請求理想的方式是使用ServiceStack's new and more flexible API,如:

public void Head(GetMethod request) { 
    base.Response.StatusCode = 200; 
} 

但是僅僅有現有的實現是不夠的,所以你可以有一個空身體。即設置200的StatusCode是多餘的,因爲它是默認狀態碼。

如果你想一般使用過濾器,比你要在請求管道應儘可能早地處理它來處理它。有關用戶定義的事件和過濾器執行的順序,請參見ServiceStack's Order of Operations

+0

當然,會嘗試任何一個。謝謝。但是,可能會回來的問題! – user836107