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
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.
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";
Vẫn chuyển hướng 302 tạm thời. – Ted
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.
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.
- 1. Server.Transfer Vs. Response.Redirect
- 2. Server.Transfer() Vs. Server.Execute()
- 3. Server.Transfer vs. Context.RewritePath
- 4. Server.transfer thay đổi URL lần thứ hai
- 5. Trang SharePoint 404
- 6. Response.WriteFile & Response.Redirect
- 7. Cách trả lại trang tùy chỉnh 404 của riêng mình?
- 8. Nginx - Tùy chỉnh trang 404
- 9. MVC4 Trang 404 tùy chỉnh?
- 10. Response.Redirect using ~ Path
- 11. Response.Redirect ngoại lệ
- 12. .htaccess chuyển hướng đến trang 404 RewriteRule
- 13. Xử lý 404 trong trang web Azure
- 14. 404 Các trang trong ASP.NET MVC
- 15. Làm cách nào để tạo trang 404?
- 16. Response.Redirect (Request.Url.AbsolutePath) Luôn "An toàn"?
- 17. Tại sao Response.Redirect đôi khi kéo từ bộ nhớ cache?
- 18. ASP.NET - Cách sử dụng Response.Redirect() từ bên trong Kiểm soát người dùng? (.ascx)
- 19. Tôi làm cách nào để chuyển hướng Lỗi 404 trong trang 404 tùy chỉnh bằng Codeigniter?
- 20. Tại sao có sự khác biệt giữa Response.Redirect vs new RedirectResult()?
- 21. Thay thế cho Response.Redirect() asp.net là gì?
- 22. 404 Chuyển hướng Tùy chỉnh
- 23. Tương đương Response.Redirect trong Silverlight là gì?
- 24. gọi Response.End() sau khi Response.Redirect()
- 25. ASP.Net Response.Redirect không hoạt động trong Application_Error?
- 26. Viết lại URL www.domain.com khiến 404 trên trang của tôi
- 27. Thực thi mã cho trang tùy chỉnh Django 404
- 28. 404 chuyển hướng cho các trang aspx không
- 29. Google 404 và .NET Các trang lỗi tùy chỉnh
- 30. Pyramid: Tuỳ chỉnh 404 trở về trang như "200 OK"
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
Ồ, trớ trêu thay! Đã sửa liên kết. – Ted