Dee*_*pak 7 iis asp.net-mvc request authorize-attribute web-performance
我只想知道AuthorizeAttribute的生命周期,并开始调试AuthorizeAttribute的默认构造函数,但无法获得任何命中.
这是自定义授权过滤器的代码.
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public CustomAuthorizeAttribute() : base()
{
string test = string.Empty;
}
public override void OnAuthorization(HttpActionContext actionContext)
{
//Some code
}
}
Run Code Online (Sandbox Code Playgroud)
有人请帮我理解这个AuthorizeAttribute的生命周期吗?
谢谢
这很难回答,因为AuthorizeAttribute
它既是一个Attribute
也是一个IAuthorizationFilter
.
在a的上下文中Attribute
,当 MVC框架第一次调用GetAttributes()时会加载它.属性是元数据,因此如果在附加调试器之前加载它,就不足为奇了.
在a的上下文中IAuthorizationFilter
,它取决于过滤器的注册方式.如果注册为全局过滤器:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomAuthorizeAttribute());
filters.Add(new HandleErrorAttribute());
}
}
Run Code Online (Sandbox Code Playgroud)
然后在MVC应用程序启动期间清楚地实例化,在这种情况下,过滤器集合是静态的,因此每次启动时仅实例化一次.
如果将过滤器作为属性放置在控制器或操作方法上,那么当事情变得更加混乱时.当一个动作运行时,MVC框架使用它来加载与该动作方法有关的任何属性FilterAttributeFilterProvider
并执行它们.在这种情况下,有一个实例被加载为IAuthorizationFilter
扫描同一个类的另一个实例Attribute
.
如果您需要明确控制过滤器的生命周期,那么您可以构建自己的IFilterProvider
生命周期.
但是没有办法控制属性的生命周期.您应该假设它始终作为单例加载,并且无法创建或销毁它.
AuthorizeAttribute
(作为过滤器)的默认行为扫描(作为属性)的另一个实例,AuthorizeAttribute
以便读取它包含的用户/组元数据.过滤器完成繁重的工作,属性只是一个标记.如果这太混乱,您可以根据被动属性将它们分成两个单独的类.
归档时间: |
|
查看次数: |
729 次 |
最近记录: |