如何访问当前HttpContext,查看ASP.NET Core2中自定义策略授权的AuthorizationHandlerContext内的路由和参数?
发布于 2017-12-14 17:31:11
您应该将一个IHttpContextAccessor实例注入到您的AuthorizationHandler
中。
在example的上下文中,这可能如下所示:
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设置中注册它(如果您的一个依赖项尚未注册),如下所示:
services.AddHttpContextAccessor();
发布于 2017-12-14 17:32:12
您可以将IHttpContextAccessor
注入到AuthorizationHandler
的构造函数中。
例如:
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
}
}
发布于 2019-09-05 19:04:47
无需注入,简单的解决方案!
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
{
var authFilterCtx = (Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)context.Resource;
var httpContext = authFilterCtx.HttpContext;
}
https://stackoverflow.com/questions/47809437
复制相似问题