2012-05-07 40 views
2

我處於一個寧靜的服務環境中,我們正在使用ServiceStack作爲我們的服務框架。在這個時刻,我需要直接從服務進行重定向,一旦我試圖從我的Get方法做​​到這一點,因爲我覺得我的Get函數看起來somethinglike這種失敗:如何從Web服務環境返回302重定向

public override object OnGet(ShareDTO request) 
     {    
      HttpContext.Current.Response.Redirect(@"http://www.google.com"); 
      return new object(); 
     } 

可能是因爲第一它試圖重定向,然後它試圖返回一個值,但這只是瘋狂的猜測。我不確定是否可以在服務環境中使用,因爲每當我使用Response.Redirect時,它始終是一個.NET aspx頁面,並且從未在服務環境中嘗試過。

有什麼想法?

+0

嗨,大家好,舉st發現了一些代碼var httpResult = new HttpResult(new object(),null,HttpStatusCode.Redirect); httpResult.Headers [HttpHeaders.Location] =「http://www.google.com」; return httpResult; – TeaLeave

+0

,但它拋出了一些serviceStack例外............... – TeaLeave

回答

6

最簡單的方法是隻返回一個自定義的HttpResult,如:

public object Any(Request request) 
{ 
    return HttpResult.Redirect("http://www.google.com"); 
} 

這相當於更明確:

return new HttpResult 
{ 
    StatusCode = HttpStatusCode.Found, 
    Headers = 
    { 
     { HttpHeaders.Location, "http://www.google.com" }, 
    } 
}; 

或者你可以直接寫入響應,無論是在一個Request Filter或服務中,如:

public object Any(Request request) 
{ 
    base.Response.StatusCode = 302; 
    base.Response.AddHeader(HttpHeaders.Location, ""); 
    base.Response.EndRequest(); 
    return null; 
} 
+0

非常感謝你在這裏的評論,我正在使用你的代碼如下'return new HttpResult() { StatusCode = HttpStatusCode.Created, Headers = { { HttpHeaders.Location,「http://www.google.com」 } } }; ' – TeaLeave

+0

對不起,我的狀態碼是302的,在這種情況下是StatusCode.Redirect。 – TeaLeave