注入 IHttpContextAccessor 中的 HttpContext null

mrf*_*eck 5 asp.net-core-mvc asp.net-core

我有一个授权处理程序,我正在将自定义 personService 注入其中。我已经通过默认 DI 连接了处理程序和 personService。人员服务 IhttpContextAccessor 在我的应用程序的其他地方工作正常,但是当从授权处理程序调用它时,httpcontext 始终为 null。

这是 AuthHandler:

     public class NoChildrenRequirement : AuthorizationHandler<NoChildrenRequirement>, IAuthorizationRequirement
{
    private readonly IPersonService _personService;

    public NoChildrenRequirement(IPersonService personService)
    {
        _personService = personService;
    }

    protected override void Handle(AuthorizationContext context, NoChildrenRequirement requirement)
    {
        var user = context.User;
        var identity = user.Identity;
        var isAuthenticated = identity.IsAuthenticated;

        var currentPerson = _personService.CurrentPerson();

        if (isAuthenticated && currentPerson != null && !currentPerson.IsAChild)
        {
            context.Succeed(requirement);
            return;
        }
        context.Fail();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在启动时连接它的地方:

     services.AddTransient<NoChildrenRequirement>();
        services.Configure<AuthorizationOptions>(options =>
        {
            options.AddPolicy("NoChildren", policy => policy.Requirements.Add(
                services.BuildServiceProvider().GetRequiredService<NoChildrenRequirement>()));
        });
Run Code Online (Sandbox Code Playgroud)

这是 personservice 的开始:

     public class PersonService : IPersonService
{
    private readonly IPersonRepository _repository;
    private readonly IMemoryCache _memoryCache;
    private readonly IConfigService _configService;
    private readonly IHttpContextAccessor _context;
    private readonly IResourceService _resourceService;
    private readonly string _cacheKey = "Person_";

    public PersonService(IPersonRepository repository, IMemoryCache memoryCache, 
        IConfigService configService, IHttpContextAccessor context, 
        IResourceService resourceService)
    {
        _repository = repository;
        _memoryCache = memoryCache;
        _configService = configService;
        _context = context;
        _resourceService = resourceService;
    }
Run Code Online (Sandbox Code Playgroud)

这是我在启动时连接人员服务的地方:

    services.AddTransient<IPersonService, PersonService>();
Run Code Online (Sandbox Code Playgroud)

如果我访问:IHttpContextAccessor _context; 在应用程序中其他任何地方的个人服务中,它都可以工作,当我从 authhandler 调用 personservice 时,所有其他依赖项都正确连接,甚至具体的 HttpContextAccessor 值不为 null,但 HttpContextAccessor 中的 HttpContext 为 null。有任何想法吗?