asp.net-mvc – AuthorizeAttribute对象的生命周期是什么?是每
我只想知道AuthorizeAttribute的生命周期,并开始调试AuthorizeAttribute的默认构造函数,但无法获得任何命中.
这是自定义授权过滤器的代码. public class CustomAuthorizeAttribute : AuthorizeAttribute { public CustomAuthorizeAttribute() : base() { string test = string.Empty; } public override void OnAuthorization(HttpActionContext actionContext) { //Some code } } 有人请帮我理解这个AuthorizeAttribute的生命周期吗? 谢谢 解决方法
这很难回答,因为AuthorizeAttribute既是Attribute又是IAuthorizationFilter.
在属性的上下文中,MVC框架第一次是loaded when GetAttributes() is called.属性是元数据,因此如果在附加调试器之前加载它,就不足为奇了. 在IAuthorizationFilter的上下文中,它取决于过滤器的注册方式.如果注册为全局过滤器: public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new CustomAuthorizeAttribute()); filters.Add(new HandleErrorAttribute()); } } 然后在MVC应用程序启动期间清楚地实例化,在这种情况下,过滤器集合是静态的,因此每次启动时仅实例化一次. 如果将过滤器作为属性放置在控制器或操作方法上,那么当事情变得更加混乱时.运行操作时,MVC框架使用FilterAttributeFilterProvider加载与该操作方法相关的所有属性并执行它们.在这种情况下,有一个实例作为IAuthorizationFilter加载,它扫描作为Attribute的同一个类的另一个实例. 如果你需要明确地控制过滤器的生命周期,那么build your own 但是没有办法控制属性的生命周期.您应该假设它始终作为单例加载,并且无法创建或销毁它. AuthorizeAttribute的默认行为(作为过滤器)扫描AuthorizeAttribute的另一个实例(作为属性),以便读取它包含的用户/组元数据.过滤器完成繁重的工作,属性只是一个标记.如果这太混乱,您可以按照Passive Attributes将它们分成两个单独的类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 使用web.config中的凭据设置配置成员资格
- ASP.NET的智能卡身份验证
- asp.net-mvc – 清理MVC 3.0应用程序中抛出的所有错误的方法
- 当我的Login.aspx不在我的应用程序的根目录时,如何使用ASP.
- asp.net-mvc-3 – 使用Web.Release.config(Web.config转换)
- asp.net – 正确设置需要粘性会话的负载均衡网络?
- asp.net-mvc – 从asp.net POST动作方法更新nhibernate实体
- asp.net-mvc-3 – 模型验证/ ASP.NET MVC 3 – 条件必需属性
- asp.net – 有没有一个原因,cshtml不受欢迎
- asp.net-mvc – 尝试继承RegularExpressionAttribute,不再验
- asp.net-mvc-4 – bundle(Sytem.Web.Optimizatio
- asp.net – 如何使一个TextBox控件是多行不可调整
- asp.net – 在IIS7中设置自定义错误页面时是否可
- asp.net-mvc – SignalR持久连接的超时是多少?
- ASP.NET HttpApplication生命周期
- asp.net-mvc – 异步操作方法
- asp.net-mvc – 即使使用静态机器密钥,HttpAntiF
- asp.net-mvc – 将项目从ASP.NET MVC1迁移到ASP.
- asp.net – 跨页回发并再次保留源页面中的数据
- asp.net – 测试Oracle存储过程的最简单的方法