【发布时间】:2022-11-15 14:27:16
【问题描述】:
我正在尝试在我的自定义类(BLL 类)上使用 HttpContextAccessor,虽然我成功初始化了 ContextAccessor,但同时 HttpContext 本身为空。
program.cs 中的代码
builder.Services.AddSingleton<IUserPermissionConfig, UserPermisionConfig>();
builder.Services.AddHttpContextAccessor();
var app = builder.Build();
var setUserPermission = app.Services.GetRequiredService<IUserPermissionConfig>();
setUserPermission.SetUserPermissionsSession(UserConstants.SYSTEM_ID);
UserPermissionConfig 组件代码
private readonly IHttpContextAccessor _httpContextAccessor;
public UserPermisionConfig( IHttpContextAccessor httpContextAccessor)
{
_permisionServiceClient = new PermissionServiceClient();
_httpContextAccessor = httpContextAccessor ?? throw new Exception("Http context accessor is null.");
}
public async Task SetUserPermissionsSession(int systemId)
{
string userName = _httpContextAccessor.HttpContext.
User.Identity.Name; //here httpcontext is alway null
UserPermissionsModel userPermissionModel = await GetUserPermission(systemId, userName);
_httpContextAccessor.HttpContext.Session.Set(UserConstants.SESSION_USER_PERMISSIOS, ByteArrayExtensions.ToByteArray(userPermissionModel));
}
有什么帮助吗?
【问题讨论】:
-
IUserPermissionConfig 是如何注册的?您什么时候请求它的实例?
-
IHttpContextAccessor 仅在 asp.net core 请求范围内有效
-
builder.Services.AddSingleton<IUserPermissionConfig, UserPermisionConfig>();
-
没有那么多好的曾经使用
IHttpContextAccessor的原因(这是一个设计糟糕的服务和Microsoft admits as much)——为什么不改变SetUserPermissionsSession来添加一个ClaimsIdentity参数呢? -
我编辑了代码以便更好地理解
标签: c# asp.net-mvc asp.net-core httpcontext