0

爲404重定向,我用下面的代碼:的Response.Redirect省略Http狀態302

 try 
     { 
      HttpContext.Current.Response.Redirect(url, true); 
     } 
     catch (System.Threading.ThreadAbortException) 
     { } 

這種重定向的問題是,該網頁被重定向到404頁,有對 404頁在後面的代碼中,我將Http Status設置爲404.因此,當在瀏覽器中給出不存在的URL時,首先接收Http狀態302,然後是Http狀態400。

要求是省略此HTTP狀態302.我嘗試了一些替代方案,然後我實現它類似如下:

  HttpContext.Current.Response.Redirect(url, false); 
      if (url.Contains("404.aspx")) 
      { 
       HttpContext.Current.Response.StatusCode = 404; 
      } 
      HttpContext.Current.ApplicationInstance.CompleteRequest(); 

現在,錯誤頁面重定向和HTTP狀態代碼404是正確的,但在瀏覽器的url字符串中,有問題的網址仍然存在。我期待有url {hostname} /404.aspx,但是我仍然在瀏覽器中看到錯誤的網址,但顯示了404.aspx。所以,它就像一個Server.Redirect。

這是預期的行爲?如何強制瀏覽器在URL字符串上顯示404.aspx,但仍然只返回Http狀態404而沒有Http狀態302?

Thanx

回答

0

我認爲你已經是對的。用戶請求http://site/MissingPage.aspx,您的服務器無法找到該頁面,並返回帶有自定義HTML錯誤消息的狀態404。他們的瀏覽器應該仍然顯示http://site/MissingPage.aspx,否則他們將如何知道什麼是壞的網址?此外,他們現在可以輕鬆糾正任何錯字。

您可以查看其他網站已經實施了自定義的404頁: