我想弄清楚如何在 ASP.NET Controller 之外访问当前登录的用户名。
例如我正在尝试这样做:
Track Created and Modified fields Automatically with Entity Framework Code First
在 DbContext
中设置对实体的跟踪。
这是我的 ApplicationDbContext
但我一直收到一条错误消息说 _httpContextAccessor
is null
:
private readonly IHttpContextAccessor _httpContextAccessor;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IHttpContextAccessor httpContextAccessor)
: base(options)
{
_httpContextAccessor = httpContextAccessor;
}
最佳答案
尝试注入(inject) IHttpContextAccessor界面
你甚至可以通过创建一个服务来进一步抽象它来提供你想要的信息(这是当前登录的用户名)
public interface IUserResolverService {
string GetUser();
}
public class UserResolverService : IUserResolverService {
private readonly IHttpContextAccessor accessor;
public UserResolverService(IHttpContextAccessor accessor) {
this.accessor = accessor;
}
public string GetUser() {
var username = accessor?.HttpContext?.User?.Identity?.Name ;
return username ?? "unknown";
}
}
您现在需要在 Startup.ConfigureServices
中设置 IHttpContextAccessor
以便能够注入(inject)它:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//OR
//services.AddHttpContextAccessor();
services.AddTransient<IUserResolverService, UserResolverService>();
并根据需要将其传递到您的存储库以记录关联的用户名
关于c# - 将 IHttpContextAccessor 注入(inject) ApplicationDbContext ASP.NET Core 1.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39131925/