Asp.net core mvc 测试调用IAsyncAuthorizationFilter.OnAuthorizationAsync是否失败
这个问题涉及到本节中概述的一个更大的目标。重述 我希望仅当主体可以访问导航树的组件(无论是基于角色还是基于策略)时,才显示这些组件 在前面的问题中,我将列出属于控制器和操作的自动化过滤器。一旦我有了IHttpContextAccessor的一个实例以及ClaimsPrincipal,我该如何测试主体是否通过了上面提到的所有授权过滤器列表 也就是说,如果我模拟了这样的东西:Asp.net core mvc 测试调用IAsyncAuthorizationFilter.OnAuthorizationAsync是否失败,asp.net-core-mvc,Asp.net Core Mvc,这个问题涉及到本节中概述的一个更大的目标。重述 我希望仅当主体可以访问导航树的组件(无论是基于角色还是基于策略)时,才显示这些组件 在前面的问题中,我将列出属于控制器和操作的自动化过滤器。一旦我有了IHttpContextAccessor的一个实例以及ClaimsPrincipal,我该如何测试主体是否通过了上面提到的所有授权过滤器列表 也就是说,如果我模拟了这样的东西: var mockAuthFilter = new AuthorizationFilterContext(...); fore
var mockAuthFilter = new AuthorizationFilterContext(...);
foreach (IAsyncAuthorizationFilter filter in filterListForGivenAction)
{
await filter.OnAuthorizationAsync(mockAuthFilter);
问题是-如何测试对OnAuthorizationAsync的调用是否失败
或者,是否有更好的方法来确保导航树仅显示主体根据authorized属性(策略和/或角色)有权查看的节点/叶如果我仔细查看了AuthorizationFilterContext- [结果]-将授权筛选器内的Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.Result设置为非空值将使筛选器管道的其余部分短路 因此,该方法最终为:
private async Task<bool> IsValid(IEnumerable<IAsyncAuthorizationFilter> filters, ActionContext actionContext)
{
var context = new AuthorizationFilterContext(actionContext, filters.Cast<IFilterMetadata>().ToList());
foreach (var f in filters)
{
await f.OnAuthorizationAsync(context);
if (context.Result != null)
{
return false;
}
}
return true;
}
私有异步任务有效(IEnumerable筛选器,ActionContext ActionContext)
{
var context=newauthorizationFilterContext(actionContext,filters.Cast().ToList());
foreach(过滤器中的var f)
{
等待f.OnAuthorizationAsync(上下文);
if(context.Result!=null)
{
返回false;
}
}
返回true;
}