2010-03-04 38 views
7

Tôi đã có customErrors đặt trong web.config của tôiASP.NET MVC Tuỳ chỉnh trang Lỗi (StatusCode 404 ném 500)

<customErrors mode="On" defaultRedirect="/Error/GeneralError"> 
    <error statusCode="404" redirect="/Error/NotFound"/> 
</customErrors> 

này hoạt động tốt tại địa phương. Một 404 ném 404. Trên lưu trữ được chia sẻ nó ném lên trang 404 máy chủ tiêu chuẩn trừ khi tôi đặc biệt thiết lập 404 để trỏ đến/Lỗi/NotFound. Đó là tốt. Bây giờ nó sẽ hiển thị trang 404 tùy chỉnh ngoại trừ mã trạng thái phản hồi là 200. Vì vậy, nếu tôi cố gắng trả lời Response.StatusCode = 404; trong hành động NotFound của tôi trong ErrorController như thế này:

public class ErrorController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.StatusCode = 404; 
     return View(); 
    } 
} 

máy chủ ném mã trạng thái 500 Lỗi máy chủ nội bộ nhưng trang GeneralError của tôi không hiển thị, chỉ một trang trắng trống không có nguồn.

Tôi đã thử nhiều kết hợp khác nhau nhưng tôi dường như không thể tìm cách làm cho nó hiển thị trang 404 tùy chỉnh của tôi cùng với phản hồi 404.

Bất kỳ ý tưởng nào?

+0

Có bất kỳ tác hại nào trong việc cho phép ứng dụng phản hồi với 200 OK trên NotFound không? Có thể có vấn đề với công cụ thu thập dữ liệu web hoặc công cụ quản trị trang web của google. – mark123

+0

Chỉ là một ý nghĩ. Nó sẽ không được tốt hơn để sử dụng: defaultRedirect = "~/Lỗi/GeneralError" và chuyển hướng = "~/Lỗi/NotFound" với các ứng dụng MVC. (Lưu ý ~ ở đầu chuỗi. Thao tác này sẽ ánh xạ tới cơ sở của ứng dụng chứ không phải cơ sở của miền ... như bạn đã biết.) – jwwishart

Trả lời

20

tôi phát hiện ra một số thông tin thú vị ở đây: http://blog.angrypets.com/2008/03/responsetryskip.html

Response.TrySkipIisCustomErrors = true; 

TrySkipIisCustomErrors Thiết true sau khi Response.StatusCode = 404; chăm sóc vấn đề.

+0

Cảm ơn bạn! Chúng tôi đã phá vỡ đầu của chúng tôi xung quanh điều này trong hơn một giờ .. – adams

+1

Tôi rất vui vì nó đã giúp. :) – mark123

1

Không sử dụng yếu tố customErrors (ngoại trừ để biến mode="On" để thử nghiệm tại địa phương). Thay vào đó, hãy thêm phương thức Application_EndRequest vào số MvcApplication cho mỗi Marco's Better-Than-Unicorns MVC 404 Answer của bạn.

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