我的 ASP.NET MVC 3 应用程序中有一个自定义操作过滤器 (AuthenticateAttribute),可确保用户登录。
我想在 OnActionExecuting 方法中引发异常,并希望这些异常由 HandleError 全局过滤器处理。这可能吗?如果可以,我该怎么做?
目前,在 OnActionExecuting 中引发异常会绕过 HandleError 全局过滤器 - 大概是因为它只会捕获动作本身发生的异常。
我的 ASP.NET MVC 3 应用程序中有一个自定义操作过滤器 (AuthenticateAttribute),可确保用户登录。
我想在 OnActionExecuting 方法中引发异常,并希望这些异常由 HandleError 全局过滤器处理。这可能吗?如果可以,我该怎么做?
目前,在 OnActionExecuting 中引发异常会绕过 HandleError 全局过滤器 - 大概是因为它只会捕获动作本身发生的异常。
抛出的异常OnActionExecuting
将由全局处理HandleErrorAttribute
。您只需要确保在您的 web.config 中启用了它:
<customErrors mode="On" />
话虽这么说,你谈到了一个AuthenticateAttribute
和OnActionExecuting
事件。这两个概念是不相容的。如果您正在编写自定义授权属性,您可能应该派生AuthorizeAttribute
并覆盖AuthorizeCore
身份验证HandleUnauthorizedRequest
方法和处理未经授权情况的方法。
如果您不想使用全局HandleErrorAttribute
来执行以下操作而不是抛出异常,您也有可能:
filterContext.Result = new ViewResult
{
ViewName = "~/Views/Shared/401.cshtml"
};
在动作属性中设置结果将使控制器动作的执行短路并直接渲染视图。