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