在我的 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:@法比奥
这就是我想要做的。我有一个运行良好的登录页面(表单身份验证) - 它调用我的自定义登录,然后调用我的 AuthorizeCore 覆盖。我的应用程序使用了大量的 ajax 调用,我的最终目标是每当用户使用应用程序时,管理员禁用它们,在被禁用后进行 ajax 调用(尽管仍处于登录状态)应该将它们注销。但是,为了做到这一点,如果用户正在进行 ajax 调用,我想返回一个自定义响应,为此,我需要覆盖 HandleUnauthorizedRequest。但是如果用户登录,我的授权核心(以及扩展的 HandleUnauthorizedRequest)将被忽略(尽管我在 ajax 正在调用的所有控制器操作上都有自定义授权标签)。
简而言之:我想在每个请求上授权用户,而不仅仅是登录请求(这似乎是会员提供者现在正在做的事情)