是否可以通过[HandleError]机制处理ActionFilter异常?

时间:2011-09-12 14:28:00

标签: asp.net-mvc-3 exception action-filter handleerror

我的ASP.NET MVC 3应用程序中有一个自定义操作过滤器(AuthenticateAttribute),可确保用户已登录。

我想在OnActionExecuting方法中引发异常,并希望这些异常由HandleError全局过滤器处理。这是可能的,如果是的话,我该怎么做?

目前,在OnActionExecuting中引发异常会绕过HandleError全局过滤器 - 可能是因为它只捕获了动作中的异常。

1 个答案:

答案 0 :(得分:2)

OnActionExecuting中引发的异常将由全局HandleErrorAttribute处理。您只需要确保在web.config中启用它:

<customErrors mode="On" />

据说你谈到了AuthenticateAttributeOnActionExecuting事件。这两个概念是不相容的。如果您正在编写自定义授权属性,那么您应该从AuthorizeAttribute派生并覆盖用于身份验证的AuthorizeCore方法和用于处理未授权案例的HandleUnauthorizedRequest方法。

如果您不想使用全局HandleErrorAttribute执行以下操作而不是抛出异常,您也有可能:

filterContext.Result = new ViewResult
{
    ViewName = "~/Views/Shared/401.cshtml"
};

在action属性中设置结果会使控制器操作的执行短路并直接呈现视图。