小编dud*_*lis的帖子

在控制器外部使用时,IHttpContextAccessor 包含空 User.Identity

我正在编写一个应用程序 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)

c# asp.net-core-mvc .net-core asp.net-core

1
推荐指数
1
解决办法
1717
查看次数

标签 统计

.net-core ×1

asp.net-core ×1

asp.net-core-mvc ×1

c# ×1