【问题标题】:Handling UnauthorizedAccessException with custom errors in MVC 4 Application在 MVC 4 应用程序中处理带有自定义错误的 UnauthorizedAccessException
【发布时间】:2013-03-28 11:57:31
【问题描述】:

我通过在 filterConfig 注册中应用 HandleError 属性为应用程序启用了全局错误处理。

 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 却没有呢?

我怎样才能让它们表现相同,因为它们本质上都是一个错误,我想阻止最终用户看到。

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-4 authorization custom-error-pages custom-error-handling


【解决方案1】:

这篇博文为我提供了异常处理的概述,使我能够决定如何处理未经授权的AccessException,这实际上意味着在 Application_OnStart 中处理它们。

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

出于我的目的,使用 HandleErrorAttribute 和全局 Application_OnStart 处理错误似乎没有多大意义,因此出于我的目的,我决定最好在 Application_OnSTart 中处理所有内容,

【讨论】:

    【解决方案2】:

    如果您只想强制像 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()));
            }
        }
    

    您引用的文章是一个很好的资源,可以更全面地解释错误处理技术,也应该考虑一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 2011-12-29
      • 2012-12-01
      • 2012-09-25
      • 2012-02-25
      • 2015-12-20
      • 2017-12-18
      • 1970-01-01
      相关资源
      最近更新 更多