加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – AuthorizeAttribute对象的生命周期是什么?是每

发布时间:2020-12-16 07:07:07 所属栏目:asp.Net 来源:网络整理
导读:我只想知道AuthorizeAttribute的生命周期,并开始调试AuthorizeAttribute的默认构造函数,但无法获得任何命中. 这是自定义授权过滤器的代码. public class CustomAuthorizeAttribute : AuthorizeAttribute { public CustomAuthorizeAttribute() : base() { str
我只想知道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 IFilterProvider可以做到这一点.

但是没有办法控制属性的生命周期.您应该假设它始终作为单例加载,并且无法创建或销毁它.

AuthorizeAttribute的默认行为(作为过滤器)扫描AuthorizeAttribute的另一个实例(作为属性),以便读取它包含的用户/组元数据.过滤器完成繁重的工作,属性只是一个标记.如果这太混乱,您可以按照Passive Attributes将它们分成两个单独的类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读