我正在编写一个应用程序 ASP.Net Core (2.2) MVC。我需要根据登录用户的某些声明的值过滤 DbContext 内的一些数据。我注入 IHttpContextAccessor,但是当我尝试访问 HttpContext.User.Identity 时 - 所有属性均为 null,所有声明均为空。
这就是我试图实现连接 IHttpContextAccessor 的方式。我使用这样的标准方法:
public void ConfigureServices(IServiceCollection services){
services.AddHttpContextAccessor();
...
}
Run Code Online (Sandbox Code Playgroud)
然后我构建一个自定义提供程序来从用户中提取声明:
public class GetClaimsFromUser : IGetClaimsProvider
{
public string UserId {get; private set;}
public GetClaimsFromUser(IHttpContextAccessor accessor)
{
UserId = accessor.HttpContext?.User.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Name)?.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我还将它注入到ConfigureServices方法中:
public void ConfigureServices(IServiceCollection services){
...
services.AddScoped<IGetClaimsProvider, GetClaimsFromUser>();
...
}
Run Code Online (Sandbox Code Playgroud)
之后,我将其注入到 ApplicationDbContext 中,并尝试在构造函数中设置私有 _userId 字段:
public class ExpenseManagerDbContext: IdentityDbContext<ApplicationUser>
{
private string _userId;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IGetClaimsProvider claimsProvider) : base(options)
{ …Run Code Online (Sandbox Code Playgroud)