将值传递给自定义授权策略ASP.net Core

fle*_*xit 5 c# asp.net authorization httpcontext asp.net-core-mvc

嗨,我想将参数传递给asp.net核心中的自定义策略。据我所知,我只能做

[Authorize(Policy="Over21")]
My Action(){
}
Run Code Online (Sandbox Code Playgroud)

但我想做

[Authorize(Policy="Over21",Para="AnotherValue")]
My Action(){
    }
Run Code Online (Sandbox Code Playgroud)

所以我决定扩展Authorize属性,然后执行此操作。

public class MyAuthorizationAttribute : AuthorizeAttribute
    {
        public string Permission;    
        public MyAuthorizationAttribute(string policy, string permission)
            : base(policy)
        {
            Permission = permission;
        } 

    }
Run Code Online (Sandbox Code Playgroud)

然后做这个

[MyAuthorization("MyPolicy","CanDoPermission")]
My Action(){
    }
Run Code Online (Sandbox Code Playgroud)

调试时仍会调用自定义授权处理程序,因此现在我想要一种从中获取权限属性的方法AuthorizationHandlerContext context。我意识到在调试过程中向下钻取时可以找到此属性

context->Resource->Filters
Run Code Online (Sandbox Code Playgroud)

在此列表中,我找到了AuthorizeFilter类型的所有对象,并进一步深入AuthorizeData->Resultview到此列表中还包含MyAuthorization对象。我使用首次登台工具执行此操作,但我不知道如何获取适用于所调用特定操作的MyAuthorization实例?

这是我得到的最远的。

var mvcContext = context.Resource as AuthorizationFilterContext;

            foreach (var filterMetadata in mvcContext.Filters)
            {
                if (filterMetadata.GetType().Name != "AuthorizeFilter") continue;

                var claimAttribute = filterMetadata as AuthorizeFilter;
                if (claimAttribute != null)
                {
                    var data = claimAttribute.AuthorizeData;
                }
Run Code Online (Sandbox Code Playgroud)

不知道下一步如何获得此对象。我希望有一种从上下文中获取这些值的简便方法。