HandleUnauthorizedRequest不会覆盖

在我的asp.net mvc3应用程序中,我有一个自定义授权属性,如下所示。

public class CustomAuthorize : AuthorizeAttribute { public IAccountRepository AccountRepository { get; set; } public CustomAuthorize() { this.AccountRepository = new UserModel(); } protected override bool AuthorizeCore(HttpContextBase httpContext) { base.AuthorizeCore(httpContext); return AccountRepository.isEnabled(HttpContext.Current.User.Identity.Name); } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { base.HandleUnauthorizedRequest(filterContext); } } 

我的控制器操作上有[CustomAuthorize]标签, AuthorizeCore方法工作正常 – 它执行我想要的逻辑(确保帐户实际启用),然后返回。

但是,重写的HandleUnauthorizedRequest方法,据我所知,应该允许我控制未经授权的请求的行为,根本不运行。 我在那里放了一个断点,我把代码放在那里,我未经授权访问我的应用程序,代码永远不会运行。

我错过了什么?

编辑:我做了一些更多的研究,发现了一些其他人有这个问题,但不幸的是没有解决方案。

EDIT2:示例代码

 [CustomAuthorize] public class UserController: Controller { public UserController() { //do stuff here } } 

编辑3:@Fabio

这就是我想要做的。 我有一个工作正常的登录页面(表单身份validation) – 它调用我的自定义登录,然后调用我的AuthorizeCore覆盖。 我的应用程序使用大量的ajax调用,我的最终目标是每当用户使用该应用程序时,管理员禁用它们,在禁用后进行ajax调用(尽管仍然登录)应该将其注销。 但是,为了做到这一点,我想返回一个自定义响应,如果用户正在进行ajax调用,为此,我需要ovverride HandleUnauthorizedRequest。 但是如果用户登录,我的Authorize Core(以及扩展名为HandleUnauthorizedRequest)将被忽略(尽管事实上我已经在我的所有控制器操作上使用了标签来调用ajax)。

简而言之:我想在每个请求上授权用户,而不仅仅是登录请求(这似乎是会员提供商现在正在做的事情)

我最后改变了我的方法。 我实现了单独的权限检查,然后每次都会调用AuthorizeCore(而不是缓存,我猜之前发生了什么)。

有趣的是,在HandleUnauthorizedRequest覆盖上设置断点仍然不会中断,但将其置于方法中。 很奇怪,把我扔了一会儿,但我现在已经解决了。

代码,如果有人有兴趣:

 public class CustomAuthorize : AuthorizeAttribute { public string Permissions { get; set; } private IAccountRepository AccountRepository { get; set; } private string[] permArray { get; set; } private string reqStatus { get; set; } public CustomAuthorize() { this.AccountRepository = new UserModel(); } protected override bool AuthorizeCore(HttpContextBase httpContext) { base.AuthorizeCore(httpContext); if (Permissions != null) { permArray = Permissions.Trim().Split(' '); if (AccountRepository.isEnabled(httpContext.User.Identity.Name)) { this.reqStatus = "permission"; return AccountRepository.hasPermissions(permArray); } else { return false; } } else { return AccountRepository.isEnabled(httpContext.User.Identity.Name); } } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (this.reqStatus == "permission") { filterContext.Result = new RedirectResult(MvcApplication.eM.cause("no_permission", "redirect")); } else { base.HandleUnauthorizedRequest(filterContext); } } } 

然后我用这个装饰控制器:

[CustomAuthorize(Permissions="test_perm")]

这可能是一个愚蠢的答案/问题,但是AccountRepository.isEnabled方法返回false,以便可以执行HandleUnauthorizedRequest?

如果它返回true,则不会执行HandleUnauthorizedRequest方法。