2013-09-26 103 views
10

Tôi có một câu hỏi về cách tốt nhất để sử dụng HandleErrorAttribute trong ứng dụng MVC 5 của tôi. Như chúng ta đã biết, chúng ta có thể thêm thuộc tính này để lọc toàn cầu như thế:Sử dụng HandleErrorAttribute trong ứng dụng ASP.NET MVC

filters.Add(new HandleErrorAttribute{View = "Error"}); 

này liên quan đến việc ứng dụng để hiển thị 'Lỗi' xem mỗi khi ngoại lệ unhandled ném vào bất kỳ mức độ ứng dụng. Tuy nhiên, nếu tôi có một số logic trong ủy quyền hoặc bộ lọc hành động toàn cầu khác, nó tạo ra một ngoại lệ, khi ngoại lệ lần đầu tiên, sau đó ứng dụng cố gắng chuyển hướng đến Chế độ xem lỗi, một lần nữa bộ lọc khác bắt đầu thực hiện và tạo lại cùng một ngoại lệ, asp.net để tránh ứng dụng chấm dứt vòng lặp này. Vậy cách tốt nhất để sử dụng HandleErrorAttribute này để tránh hành vi như thế nào? Cảm ơn!

Edit: Sau một số debug tôi thấy rằng đây không phải là hành vi thông thường của HandleErrorAttribute, vì vậy vòng lặp này xảy ra đối với tôi chỉ khi tôi sử dụng đường tùy chỉnh f.e.

{key}/{controller}/{action} 

và khi một số lỗi xảy ra trong logic lọc, sau đó ứng dụng cố gắng chuyển hướng đến Lỗi View, nhưng một lần nữa một lôgic lọc bắt đầu exectue và tôi thậm chí nhìn thấy một "Lỗi" giá trị trong {key} tham số tuyến đường, vì vậy nó là hành vi không mong muốn. Khi tôi sử dụng tuyến đường mặc định {controller}/{action} điều này không xảy ra và tôi nhận được chính xác đến Chế độ xem lỗi mà không thực hiện bất kỳ logic bộ lọc toàn cục nào lần thứ hai.

Trả lời

9

Bạn nên quấn Logic lọc hành động của bạn bên trong một trycatch, sau đó bên trong khối catch, chuyển hướng đến xem Error và vượt qua Exception.

Lựa chọn thay thế duy nhất khác của bạn là mương HandleError hoàn toàn và sử dụng sự kiện Application_Error bên trong Global.asax để quản lý việc xử lý lỗi của bạn. Bằng cách đó, bạn có thể chuyển hướng đến hành động Error bên trong đó bất kể nơi xảy ra lỗi.

+0

Cảm ơn! Đây là một cách tiếp cận tốt đẹp. – igorGIS

+0

còn sử dụng ELMAH thì sao? –

+1

@Murali Tôi không phải là fan của ELMAH phải trung thực – mattytommo

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