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

C# 将值传递给自定义授权策略ASP.net Core,c#,asp.net,authorization,asp.net-core-mvc,httpcontext,C#,Asp.net,Authorization,Asp.net Core Mvc,Httpcontext,您好,我想将参数传递给asp.net core中的自定义策略。据我所知,到目前为止,我只能这样做 [Authorize(Policy="Over21")] My Action(){ } 但我想这样做 [Authorize(Policy="Over21",Para="AnotherValue")] My Action(){ } 所以我决定扩展Authorize属性,然后执行此操作 public class MyAuthorizationAttribute : AuthorizeAttr

您好,我想将参数传递给asp.net core中的自定义策略。据我所知,到目前为止,我只能这样做

[Authorize(Policy="Over21")]
My Action(){
}
但我想这样做

[Authorize(Policy="Over21",Para="AnotherValue")]
My Action(){
    }
所以我决定扩展Authorize属性,然后执行此操作

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

    }
那就这样做吧

[MyAuthorization("MyPolicy","CanDoPermission")]
My Action(){
    }
调试时仍会调用自定义授权处理程序,因此现在我需要一种从
AuthorizationHandlerContext
获取权限属性的方法。我意识到,在调试期间向下钻取时可以找到此属性

context->Resource->Filters
在这个列表中,我找到了AuthorizeFilter类型的所有对象,并进一步深入到
AuthorizeData->Resultview
这也是一个包含我的授权对象的列表。我使用一个初次登场的工具来做这件事,但我不知道如何获得适用于被调用的特定操作的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;
                }

我不确定下一步如何获取此对象。我希望有一种更简单的方法从上下文中获取这些值。

这方面运气好吗?