Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用AuthorizationHandlerContext访问ASP.NET Core 2中当前的HttpContext自定义基于策略的授权_C#_Asp.net Core_.net Core_Asp.net Core 2.0 - Fatal编程技术网

C# 如何使用AuthorizationHandlerContext访问ASP.NET Core 2中当前的HttpContext自定义基于策略的授权

C# 如何使用AuthorizationHandlerContext访问ASP.NET Core 2中当前的HttpContext自定义基于策略的授权,c#,asp.net-core,.net-core,asp.net-core-2.0,C#,Asp.net Core,.net Core,Asp.net Core 2.0,如何访问当前HttpContext以检查ASP.NET Core 2中自定义基于策略的授权的AuthorizationHandlerContext中的路由和参数 参考示例:您应该将的实例注入到您的授权处理程序中 在您的上下文中,这可能如下所示: 公共类BadgeEntryHandler:AuthorizationHandler { IHttpContextAccessor_httpContextAccessor=null; 公共BadgeEntryHandler(IHttpContextAcce

如何访问当前HttpContext以检查ASP.NET Core 2中自定义基于策略的授权的AuthorizationHandlerContext中的路由和参数


参考示例:

您应该将的实例注入到您的
授权处理程序中

在您的上下文中,这可能如下所示:

公共类BadgeEntryHandler:AuthorizationHandler
{
IHttpContextAccessor_httpContextAccessor=null;
公共BadgeEntryHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor=httpContextAccessor;
}
受保护的覆盖任务句柄请求同步(
授权上下文上下文,
输入BuildingRequirement(需求)
{
HttpContext HttpContext=\u httpContextAccessor.HttpContext;//此处访问上下文
if(context.User.HasClaim(c=>c.Type==ClaimTypes.BadgeId&&
c、 发行人=”http://microsoftsecurity"))
{
成功(要求);
返回Task.FromResult(0);
}
}
}
您可能需要在DI设置中注册此项(如果其中一个依赖项尚未注册),如下所示:

services.AddHttpContextAccessor();

您可以将
IHttpContextAccessor
注入到
AuthorizationHandler
s构造函数中

e、 g

公共类MyAuthorizationHandler:AuthorizationHandler
{
专用IHttpContextAccessor_contextAccessor;
公共MyAuthorizationHandler(IHttpContextAccessor contextAccessor)
{
_contextAccessor=contextAccessor;
}
受保护的覆盖任务HandleRequirementAsync(授权HandlerContext上下文,
最小许可级别要求){
var httpContext=_contextAccessor.httpContext;
//做事
}
}

无需注射,简单解决方案

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
        {
                var authFilterCtx = (Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)context.Resource;
                var httpContext = authFilterCtx.HttpContext;  
        }

好的,在不从HttpContext手动解析字符串路径的情况下,提取HTTP GET参数(从路由,如route=“/api/customers/{customerGuid}”)的最佳方法是什么?Tx@HrvojeKusulja:此阶段不绑定参数值(即使对于
IActionContextAccessor
)。你可能需要做一些类似于这篇文章详细介绍的事情。这个答案的作者是微软的ASP.NET安全人员,所以它是权威的。自从这篇文章发表后,事情是否有所进展,我不能确定。注意:我已经更新了关于DI注册的详细信息(可能是必需的)。它对我不起作用<代码>System.InvalidCastException:“无法将类型为“Microsoft.AspNetCore.Routing.RouteEndpoint”的对象强制转换为类型为“Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext”。
您找到netcoreapp3.0的有效解决方案了吗?
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
        {
                var authFilterCtx = (Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)context.Resource;
                var httpContext = authFilterCtx.HttpContext;  
        }