2011-07-28 28 views
3

我們有一段代碼檢測舊的URL並執行如下的重定向:302重定向仍然試圖運行原始請求

Response.Clear(); 
Response.StatusCode = 301; 
Response.Status = "301 Moved Permanently"; 
try 
{ 
    Response.AddHeader("Location", MyLink.GetFullPath()); 
} catch 
{ 
    Response.StatusCode = 302; 
    Response.Status = "302 Moved Temporarily"; 
    Response.AddHeader("Location", "/"); 
} 
Response.End(); 

什麼本質上發生的事情是,有在301永久重定向的嘗試如果不成功,則將「302 Moved Temporarily」移動到默認主頁。

問題:我遇到的問題如下。如果輸入一個URL(比如說「/ product/ABC123」)。 URL 301重定向失敗,並執行catch中的302重定向,但原始URL(「/ product/ABC123」)仍在後臺執行。當我在調試器中運行網站時,302重定向工作正常,並且默認主頁出現,然後半秒鐘後執行補充頁面,並且由於原始URL爲「否」而出現服務器500錯誤更長的可接受。

我的問題如下:我怎樣才能完全停止原始請求,並讓302重定向做它需要做的事情。我試過「HttpContext.ApplicationInstance.CompleteRequest();」在「Response.End()」之下,但它並未停止原始請求。

編輯:重定向代​​碼正在從Controller類的Index方法中執行。

+1

我認爲這是相當有意義的,你試圖執行這段代碼。這是global.asax中的事件,這是一個控制器操作,一個過濾器,一個http處理程序? –

+0

@Tz_很好,我會編輯帖子 –

回答

5

如果您處於控制器操作中,請退出操作方法並返回new HttpStatusCodeResult(302)

+0

完美!像魅力一樣工作! ... 謝謝 ! –