4

我通过在filterConfig注册中应用HandleError属性为应用程序启用了全局错误处理。使用MVC 4中的自定义错误处理UnauthorizedAccessException应用程序

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 
} 

然后,我使用自定义错误(web.config)希望显示一个友好的错误消息为每个服务器错误。

<customErrors mode="On" ></customErrors> 

这似乎是工作的罚款对于大多数异常和我得到在自定义错误页视图(共享视图文件夹Error.cshtml)中所显示的预期行为。

但是我最近已经注意到,如果抛出的错误是UnauthorizedAccessException,这不是我看到的行为。

我有点难以忍受这一点,因为看着小提琴手,我发现这个UnauthorizedAccessException异常返回一个普通的500内部服务器错误,作为标准例外。

那么标准异常如何遵守我的customError设置,但UnauthorizedAccessException不会呢?

我该如何让他们行为相同,因为他们本质上都是我想阻止最终用户看到的错误。

+2

看看这个问题http://stackoverflow.com/questions/12183653/mvc-handleerror-filter-didnt-catch-an-exception – polybios

回答

1

这篇博客文章为我提供了异常处理的概述,使我能够决定如何处理unauthorizedAccessException,这基本上意味着在Application_OnStart中处理它们。

http://prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc

对于我而言似乎并没有出现在处理与HandleErrorAttribute错误,并在全球Application_OnStart多点,这样我的目的,我决定这是最好的Application_OnSTart来处理一切,

0

如果你只是想给力“未处理”的异常像UnauthorizedAccessException要经过正常的自定义错误页,那么你可以重写控制器类似于以下onException的方法:

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())); 
     } 
    } 

虽然您引用的文章是更全面解释错误处理技术的极好资源,但也应予以考虑。

相关问题