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

时间:2017-01-13 13:43:27

标签: c# asp.net authorization asp.net-core-mvc httpcontext

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

[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获取权限属性的方法。我意识到,当我在调试期间向下钻取时,我可以找到这个属性

context->Resource->Filters

在此列表中,我找到了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;
                }

我不知道下一步该怎么做才能得到这个对象。我希望有更简单的方法从上下文中获取这些值。

0 个答案:

没有答案