【发布时间】:2014-11-01 13:10:42
【问题描述】:
这是我的 CustomAuthorizeAttribute 类:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public string ControllerName { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (ControllerName != "pass")
{
// stop or redirect
}
}
}
我将它注册到所有控制器可以使用的全局过滤器:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AdminAuthorizeAttribute());
}
对于某些特定的操作,我使用参数 ControllerName 添加它:
[AdminAuthorize(ControllerName="pass")]
public ActionResult Index()
{
return View();
}
但是现在问题出在OnAuthorization(),ControllerName在执行特定Action时总是得到null。
那是因为我不能将全局 authorizeAttribute 和相同的 Attibute 用于某些特定的操作 together??为什么?我一直认为如果我为特定的Action添加一些AuthorizeAttribute,并将Attribute添加到全局过滤器中,那么特定的Action就会得到高度优先级。
更新1:
如果问题源是 2 授权全部执行。那么当我为某些操作添加相同的 AuthorizeAttribute 时,如何覆盖全局授权过滤器? (唯一不同的是参数,我只是希望它在我为某些操作添加一个时忽略全局授权)
【问题讨论】:
-
您可以手动更改该属性的 Order 属性,使其首先被触发。
标签: c# asp.net .net asp.net-mvc