您好我想将参数传递给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;
}
我不知道下一步该怎么做才能得到这个对象。我希望有更简单的方法从上下文中获取这些值。