【发布时间】:2014-01-09 01:41:08
【问题描述】:
我正在实现一个从 AuthorizeAttribute 继承的自定义授权过滤器。经过我的研究,我发现动作过滤器被缓存了,所以它们只被实例化一次。
这是我的问题。如果我实现并使用如下所示的自定义操作过滤器,它应该无法正常工作,因为它会被实例化一次并且永远不会再次调用构造函数。但是当我测试时,效果很好,所以我在想有些东西我不知道。
谁能解释清楚(动作过滤器生命周期?)?
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
private readonly string value = string.Empty;
public CustomAuthorizeAttribute(string value)
{
this.value = value;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// Do something with this.value
}
}
public class HomeController : Controller
{
[CustomAuthorize("ACCESS_INDEX")]
public ActionResult Index()
{
}
[CustomAuthorize("ACCESS_LOGIN")]
public ActionResult Login()
{
}
}
【问题讨论】:
-
您使用的是哪个版本的 MVC?
-
@thepirat000 这是 mvc3。
-
在 CustomAuthorizeAttribute 构造函数上放置一个断点,您将看到它被调用两次,用于两个操作,即 Index 和 Login,但任何后续对 Index 和 Login 的请求都不会达到断点,因为缓存了操作过滤器,因此它们被每个控制器操作缓存,或者您可以说如果您在 10 个操作处使用操作属性,那么该操作属性将最多有 10 个实例。
标签: asp.net-mvc lifecycle actionfilterattribute custom-action-filter