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。有任何想法吗?
| 归档时间: |
|
| 查看次数: |
2466 次 |
| 最近记录: |