首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ASP.NET Core2中访问当前的HttpContext使用AuthorizationHandlerContext的自定义策略授权

如何在ASP.NET Core2中访问当前的HttpContext使用AuthorizationHandlerContext的自定义策略授权
EN

Stack Overflow用户
提问于 2017-12-14 17:01:00
回答 4查看 15.6K关注 0票数 32

如何访问当前HttpContext,查看ASP.NET Core2中自定义策略授权的AuthorizationHandlerContext内的路由和参数?

引用示例:Custom Policy-Based Authorization

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-12-14 17:31:11

您应该将一个IHttpContextAccessor实例注入到您的AuthorizationHandler中。

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

代码语言:javascript
运行
复制
public class BadgeEntryHandler : AuthorizationHandler<EnterBuildingRequirement>
{
    IHttpContextAccessor _httpContextAccessor = null;

    public BadgeEntryHandler(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    protected override Task HandleRequirementAsync(
        AuthorizationContext context, 
        EnterBuildingRequirement requirement)
    {
        HttpContext httpContext = _httpContextAccessor.HttpContext; // Access context here

        if (context.User.HasClaim(c => c.Type == ClaimTypes.BadgeId &&
                                       c.Issuer == "http://microsoftsecurity"))
        {
            context.Succeed(requirement);
            return Task.FromResult(0);
        }
    }
}

您可能需要在您的DI设置中注册它(如果您的一个依赖项尚未注册),如下所示:

代码语言:javascript
运行
复制
services.AddHttpContextAccessor();
票数 70
EN

Stack Overflow用户

发布于 2017-12-14 17:32:12

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

例如:

代码语言:javascript
运行
复制
public class MyAuthorizationHandler : AuthorizationHandler<MyRequirement>
{
    private IHttpContextAccessor _contextAccessor;

    public MyAuthorizationHandler (IHttpContextAccessor contextAccessor)
    {
        _contextAccessor = contextAccessor;
    }

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
        MinimumPermissionLevelRequirement requirement) {

        var httpContext = _contextAccessor.HttpContext;
        // do things
    }
}
票数 4
EN

Stack Overflow用户

发布于 2019-09-05 19:04:47

无需注入,简单的解决方案!

代码语言:javascript
运行
复制
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
        {
                var authFilterCtx = (Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)context.Resource;
                var httpContext = authFilterCtx.HttpContext;  
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47809437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档