【发布时间】:2012-06-20 17:59:11
【问题描述】:
在我的 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。但是,如果用户登录,我的 Authorize Core(以及扩展的 HandleUnauthorizedRequest)将被忽略(尽管我在 ajax 调用的所有控制器操作上都有 customauthorize 标签)。
简而言之:我想在每个请求上授权用户,而不仅仅是登录请求(这似乎是会员提供者现在正在做的事情)
【问题讨论】:
-
你还有其他继承自 AuthorizeAttribute 的属性吗?您是否在类级别或基类上设置了 AuthorizeAttribute?
-
我有一个自定义会员提供程序,这个类是在同一个文件中声明的。据我所知,我没有其他继承自 AuthorizeAttribute 的属性。
-
AuthorizeCore 中的断点是否按预期中断?
-
@KyleTrauberman 不,这很奇怪。
-
你能在你使用这个属性的地方粘贴一些代码吗?这似乎很琐碎,但看到使用情况可能会对问题有所了解。
标签: c# asp.net-mvc-3 asp.net-membership authorization