2009-08-14 38 views
5

khi xử lý lỗi 404 trong ASP.NET là OK để đặt lỗi 404 chuyển hướng tới trang gửi mã phản hồi 404 tới trình duyệt hoặc nên sử dụng server.transfer để Tiêu đề 404 có thể được gửi tới trình duyệt trong khi url vẫn giữ nguyên?404 trang response.redirect vs server.transfer

Trả lời

3

customErrors statusCode = "404" dẫn đến 302 chuyển hướng tạm thời, sau đó là 404 (nếu bạn đã đặt mã trong mã của trang 404).

Vì vậy, sau đây nên làm điều đó cho bạn trong global.asax hoặc lỗi của bạn HttpModule:

protected void Application_Error(Object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 
     if (exception is HttpUnhandledException) 
     { 
      if (exception.InnerException == null) 
      { 
       Server.Transfer(ERROR_PAGE_LOCATION, false); 
       return; 
      } 
      exception = exception.InnerException; 
     } 

     if (exception is HttpException) 
     { 
      if (((HttpException)exception).GetHttpCode() == 404) 
      { 
       Server.ClearError(); 
       Server.Transfer(NOT_FOUND_PAGE_LOCATION); 
       return; 
      } 
     } 

     if (Context != null && Context.IsCustomErrorEnabled) 
      Server.Transfer(ERROR_PAGE_LOCATION, false); 
     else 
      Log.Error("Unhandled exception trapped in Global.asax", exception); 
    } 

Edit: Oh, và Best way to implement a 404 in ASP.NET đặt tôi trên đường đến Server.ClearError bắt buộc();

Xem http://www.andornot.com/blog/post/Handling-404-errors-with-ASPNET.aspx cho bài đăng tôi đã làm bao gồm tất cả điều này.

+0

Tôi rất tò mò muốn xem blog của bạn nhưng trớ trêu thay là không tìm thấy trang. ;) – Korijn

+1

Ồ, trớ trêu thay! Đã sửa liên kết. – Ted

2

Tôi sẽ sử dụng phần tùy chỉnh của web.config, sau đó bạn có thể chỉ định trang bạn muốn 404 truy cập.

<configuration> 
    <system.web> 
     <customErrors mode="On" defaultRedirect="Error.aspx"> 
      <error statusCode="404" redirect="404Error.aspx" /> 
     </customErrors> 
    </system.web> 
</configuration> 

Trên trang tiếp nhận nếu bạn muốn vẫn gửi 404 bạn có thể đặt này trong trường hợp Page_Load:

Response.Status = "404 Not Found"; 
+3

Vẫn chuyển hướng 302 tạm thời. – Ted

0

Lời khuyên của tôi là để cho quá trình ASP.NET làm việc cho bạn dựa trên web.config của bạn nhưng nếu bạn thực sự muốn điều này trong mã bạn nên gắn bó với Server.Transfer gây ra nó sẽ giúp bạn tiết kiệm một postback.

1

Response.Redirect sẽ thực hiện 302 trước 404 trên trang được chuyển hướng. Server.Transfer sẽ giữ URL, do đó, nó là 404 trên trang được yêu cầu.

Tôi nghĩ rằng tất cả đều xuất hiện trong SEO. Tôi khuyên bạn nên sử dụng Server.Transfer vì nó rõ ràng hơn đối với trình duyệt/công cụ tìm kiếm mà không tìm thấy URL được yêu cầu. Nếu bạn sử dụng trang Response.Redirect được yêu cầu 'tạm thời' được chuyển hướng đến một trang không tìm thấy. Điều đó không tốt ... 302 không phải là một ý kiến ​​hay.

Các vấn đề liên quan