Tôi đã có một catchall trong bộ điều khiển cơ sở của tôi xử lý các lỗi mà tôi không nắm bắt được. Nó đi gần như thế này:Vấn đề với xử lý lỗi bộ điều khiển cơ sở chung trong ASP.NET MVC
protected override void OnException(ExceptionContext filterContext)
{
// Bail if we can't do anything
if (filterContext == null)
return;
// log
var ex = filterContext.Exception ??
new Exception("No further information exists.");
LogException(ex);
filterContext.ExceptionHandled = true;
var data = new ErrorPresentation
{
ErrorMessage = HttpUtility.HtmlEncode(ex.Message),
TheException = ex
};
filterContext.Result = View("Error", data);
base.OnException(filterContext);
}
Bây giờ công trình này tuyệt vời nếu lỗi xảy ra trong bộ điều khiển. Vấn đề là nếu lỗi là trong khi hiển thị trang aspx (giả sử, trong phương thức HtmlHelper), toàn bộ toàn bộ chế độ xem lỗi được hiển thị, tại vị trí trên trang xảy ra lỗi. Điều đó có nghĩa rằng toàn bộ trang lỗi (MasterPage và tất cả) được hiển thị trong trang bị lỗi. Không chính xác hành vi mong đợi.
Tôi đã thử thay đổi dạng xem thành RedirectToAction, nhưng điều đó sẽ không hoạt động như một tuyến đường không tồn tại đối với mọi bộ điều khiển (Home/Error, Configuration/Error, vv).
Tôi làm cách nào để làm việc này cho cả lỗi trong bộ điều khiển VÀ lỗi trên trang?
Bạn có nói rằng khi một lỗi xảy ra trong một khung nhìn, trang lỗi của bạn được hiển thị sau khi lỗi xảy ra trong khung nhìn của bạn ? –