2

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

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

目前,在 OnActionExecuting 中引发异常会绕过 HandleError 全局过滤器 - 大概是因为它只会捕获动作本身发生的异常。

4

1 回答 1

2

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

<customErrors mode="On" />

话虽这么说,你谈到了一个AuthenticateAttributeOnActionExecuting事件。这两个概念是不相容的。如果您正在编写自定义授权属性,您可能应该派生AuthorizeAttribute并覆盖AuthorizeCore身份验证HandleUnauthorizedRequest方法和处理未经授权情况的方法。

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

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

在动作属性中设置结果将使控制器动作的执行短路并直接渲染视图。

于 2011-09-12T14:38:46.480 回答