2011-01-30 65 views
9

Tôi đã thử mọi thứ, thậm chí gỡ cài đặt asp.net mvc3 và tôi không thể xử lý bộ lọc toàn cầu HandleError.asp.net mvc 3 handleerror bộ lọc toàn cầu luôn hiển thị trạng thái IIS 500 trang

Tôi đã thiết lập bộ lọc HandleError trong Global.asax:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
} 

Ngoài ra tôi có customErrors kích hoạt (nó không quan trọng nếu tôi đặt defaultRedirect = "Lỗi" hay không, tôi nghĩ rằng đó là trong các tài liệu vì là cần thiết cho các phiên bản cũ của MVC):

<customErrors mode="On" /> 

đang cố gắng để di chuyển qua các trang cho đến khi lỗi được nâng lên, thời tiết bạn làm từ localhost hoặc sử dụng tên máy, bên trong máy chủ phát triển hoặc IIS 7.5, nó luôn chuyển hướng đến trang trạng thái chuẩn 500, thay vì lưu trữ của tôi om Error.cshtml view mà tôi đã tạo trong Shared. Đây là lỗi chế độ code:

@model System.Web.Mvc.HandleErrorInfo 

@{ 
    ViewBag.Title = "Oooops"; 
} 

<h2>Ooops Something really bad happened!</h2> 

Ngoài ra tôi đã lưu ý rằng nếu tôi có thể tạo một dự án ASP.NET MVC3 mới và sau đó chọn "Ứng dụng Internet" mẫu, và customErrors chỉ cho phép trong dự án đó, sau đó bộ lọc HandleError bắt đầu làm việc tốt, tuy nhiên sử dụng mẫu MVC3 rỗng thì không.


Tôi muốn làm rõ, thực sự tôi có thể thấy chế độ xem lỗi đang được xử lý khi gỡ lỗi, tuy nhiên trình duyệt luôn hiển thị trang Lỗi 500.

+0

Tôi không nghĩ như vậy, như tôi đã nói nó không hoạt động trên máy chủ phát triển hoặc –

Trả lời

8

Tôi đã gặp phải sự cố tương tự này. Tôi tìm thấy bài đăng này: 500 Internal Server Error in ASP.NET MVC và cố gắng bỏ chọn "Lỗi Http thân thiện" và thuộc tính HandleErrors của tôi bắt đầu hoạt động như mong đợi trong IE 8 với chế độ tương thích IE 7 được kiểm tra (và bắt đầu hoạt động giống như trong Chrome theo mặc định).Tôi không nghĩ rằng đây là một giải pháp hợp lệ cho một ứng dụng được triển khai, nhưng có lẽ có một cách để mở rộng thuộc tính HandleError để nó chuyển hướng đến bộ điều khiển "Lỗi" thay vì chỉ là chế độ xem Lỗi mặc định.

CẬP NHẬT: This post cho thấy rằng khi một trạng thái HTTP 500 được trả lại, IE xử lý nó một cách lúng túng. Một cách để có được xung quanh nó, là để thiết lập trạng thái 200, sau đó tất cả mọi thứ dường như làm việc OK (ngay cả trong IE).

public class CustomHandleErrorAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext filterContext) 
    {  
     base.OnException(filterContext); 

     //https://stackoverflow.com/questions/5137627/mvc-handleerror-returns-error-500-and-view-error-page 
     //https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror 
     filterContext.HttpContext.Response.StatusCode = 200; 
    } 
} 
1

Sau đây là các bước tôi đã sử dụng và mà làm việc cho tôi:

  1. Tạo một dự án mới ASP.NET MVC 3 sử dụng mẫu rỗng
  2. Thêm một bộ điều khiển mới gọi là HomeController như sau Nội dung (bạn không cần bất kỳ view => chúng ta đang ném một ngoại lệ anyway):

    public class HomeController : Controller 
    { 
        public ActionResult Index() 
        { 
         throw new Exception("error"); 
        } 
    } 
    
  3. Bật lỗi tùy chỉnh trên web.config bằng cách thêm phần sau:

    <customErrors mode="On"> 
    </customErrors> 
    
  4. Chạy trang web và chế độ xem ~/Views/Shared/Error.cshtml được tạo bởi mẫu sẽ được hiển thị.

+0

Tôi sẽ cố gắng một lần nữa khi tôi về nhà, tuy nhiên đó là các bước tôi theo dõi –

+0

Tôi đã sao chép chính xác các bước đó và tôi chỉ nhận được trạng thái http 500 –

+0

@iCe, bạn có đang chạy trên Cassini không? Ngoài ra kiểm tra trong EventLog của máy tính của bạn. Có thể có một vấn đề khác mà bạn đang gặp phải. –

6

Vâng này được hilarous, cuối cùng tìm thấy câu trả lời, máy này có Internet Explorer 9 beta cài đặt và là một sự khác biệt trong hành vi khi xử lý tình trạng 500 rằng HandleError bộ thuộc tính trước khi hiển thị các quan điểm lỗi.

Tôi đã thử với các trình duyệt khác và đang làm việc tốt: Chrome vs IE 9 Beta

Những gì tôi không thể undestarnd tại là lý do tại sao "Internet Appication" mẫu đang làm việc mặc dù.

Bất cứ ai cũng biết nơi tôi có thể đăng lỗi? Có nên đến nhóm mvc asp.net hoặc nhóm IE 9 không? Làm cách nào để liên hệ với họ?

+0

Wow. Rất hay, tôi không biết tôi sẽ tìm kiếm trong bao lâu nếu tôi không tìm thấy câu trả lời của bạn: D – Shtong

0

Tôi nghĩ rằng tôi đã tìm được cách giải quyết vấn đề này. Thay thế của bạn Error.cshtml và _Layout.cshtml với những cái được tạo ra từ Internet hoặc Intranet mẫu.

4

Tìm thấy vấn đề - trang lỗi - đảm bảo bạn đặt một số nội dung giả - để làm cho kích thước nội dung ít nhất 1KB.

Dưới đây là nội dung của Error.cshtml

<!DOCTYPE html> 
<html> 
<head> 
    <title>Error</title> 
</head> 
<body> 
    <h2> 
     Sorry, an error occurred while processing your request. @DateTime.Now 
    </h2> 
    <div> 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    .......................................................................... 
    </div> 
</body> 
</html> 
+0

Tuyệt vời, cảm ơn bạn! Kỳ dị! – Matsen75

+0

@Bavarious 6 năm sau, tôi đang gặp vấn đề này và nội dung của Error.cshtml của tôi đã ở 1KB nhưng tôi vẫn không thể giải quyết vấn đề này rất khó chịu. –

18

Để khắc phục tất cả điều này bạn cần làm là chỉnh sửa trang Error.cshtml của bạn và chắc chắn rằng bạn đã thiết lập thuộc tính Giao diện một cách chính xác. Trong một ứng dụng rỗng MVC 3 này được thiết lập để NULL, gây ra lỗi máy chủ nội bộ HTTP 500.

Tôi cố định vấn đề này bằng cách đơn giản thêm:

@{ Layout = "~/Views/Shared/_Layout.cshtml"; }

+2

Bài đăng này chưa được xếp hạng. 1 THANKS !!! – automagic

+0

Thật vậy !! Bài đăng này đã giải quyết được vấn đề của tôi !! +1 từ tôi! –

+0

Điều này thực sự giải quyết vấn đề của tôi là tốt. Ứng dụng internet trống -> Không có bố cục nào được xác định. Điểm tốt! – Junto

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