在预期的异常被抛出时尝试留在页面上

时间:2013-10-25 14:04:45

标签: asp.net-mvc asp.net-mvc-4

我有CustomHandleErrorAttribute我覆盖OnException这样的方法:

    public override void OnException(ExceptionContext filterContext) {
        if (!filterContext.ExceptionHandled) {
            if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") {
                filterContext.Result = new JsonResult {
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                    Data = new {
                        error = true,
                        message = filterContext.Exception.Message
                    }
                };
            }
            else {
                var controllerName = (string)filterContext.RouteData.Values["controller"];
                var actionName = (string)filterContext.RouteData.Values["action"];
                var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

                filterContext.Result = new ViewResult {
                    ViewName = View,
                    MasterName = Master,
                    ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
                    TempData = filterContext.Controller.TempData
                };
            }
        }
    }

我可以通过AJAX请求获取异常,而Action正在处理。

我有一个问题,当异常抛出时(例如在页面/Customers/Customer/1上),我有yellow screen Server Error in '/' Application,但我想显示我的视图并传递给{{ 1}}有关处理的异常的信息,然后显示在此页面上(不要重定向到ViewData或其他任何地方)。

所以: 1.如果我有异常 - 只显示没有表格的异常信息; 2.如果我没有例外显示形式;

是否可能,或抛出的异常无法继续处理操作并显示相同的视图?

THX。

1 个答案:

答案 0 :(得分:1)

当您允许异常一直冒泡到IIS级别而不被捕获时,您会看到黄色的死亡屏幕。这将成为500服务器错误,如果您设置了黄色屏幕,则会出现黄色屏幕或500错误页面。没有其他任何东西可以显示,因为无法从错误中恢复。

获取相同视图的唯一方法是捕获每个异常并以某种方式响应它。这可能会在视图或其他内容上为用户生成错误消息,但是由您来捕获异常并做出响应,IIS不会为您执行此操作。