我有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。
答案 0 :(得分:1)
当您允许异常一直冒泡到IIS级别而不被捕获时,您会看到黄色的死亡屏幕。这将成为500服务器错误,如果您设置了黄色屏幕,则会出现黄色屏幕或500错误页面。没有其他任何东西可以显示,因为无法从错误中恢复。
获取相同视图的唯一方法是捕获每个异常并以某种方式响应它。这可能会在视图或其他内容上为用户生成错误消息,但是由您来捕获异常并做出响应,IIS不会为您执行此操作。