Asp.net mvc 在MVC 4应用程序中处理带有自定义错误的UnauthorizedAccessException
我已经通过在filterConfig注册中应用HandleError属性启用了应用程序的全局错误处理Asp.net mvc 在MVC 4应用程序中处理带有自定义错误的UnauthorizedAccessException,asp.net-mvc,asp.net-mvc-4,authorization,custom-error-pages,custom-error-handling,Asp.net Mvc,Asp.net Mvc 4,Authorization,Custom Error Pages,Custom Error Handling,我已经通过在filterConfig注册中应用HandleError属性启用了应用程序的全局错误处理 public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } } 然后我使用自定义错误(web.config)为每个服务器错
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
然后我使用自定义错误(web.config)为每个服务器错误显示一条友好的错误消息
<customErrors mode="On" ></customErrors>
对于大多数异常来说,这似乎工作得很好,我得到了预期的行为,即显示自定义错误页面视图(共享视图文件夹中的error.cshtml)
但是,我最近注意到,如果抛出的错误是UnauthorizedAccessException,我就不会看到这种行为
我对此有点困惑,因为在fiddler中,我看到这个UnauthorizedAccessException异常返回一个普通的500内部服务器错误,就像标准异常一样
那么,为什么标准异常符合我的customError设置,而UnauthorizedAccessException不符合呢
我怎样才能让它们表现得一样,因为它们本质上都是一个错误,我想让最终用户看不到。这篇博客文章为我提供了异常处理的概述,使我能够决定如何处理unauthorizedAccessException,这本质上意味着在应用程序启动时处理它们
出于我的目的,处理HandleErrorAttribute和全局应用程序启动中的错误似乎没有多大意义,因此出于我的目的,我决定最好处理应用程序启动中的所有内容,如果您只想强制“未处理”异常,如
UnauthorizedAccessException
通过正常的自定义错误页面,则可以覆盖控制器的OneException方法,类似于以下内容:
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
if (!filterContext.ExceptionHandled && filterContext.RequestContext.HttpContext.IsCustomErrorEnabled)
{
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
filterContext.Result = View("Error",
new HandleErrorInfo(filterContext.Exception, filterContext.GetCurrentControllerName(), filterContext.GetCurrentActionName()));
}
}
不过,您引用的这篇文章是更全面地解释错误处理技术的绝佳资源,也应该予以考虑。看看这个问题