我正在尝试弄清楚如何在ASP.NET Controller之外访问当前登录的用户名.
I am trying to figure out how to get access to the current logged in username outside of an ASP.NET Controller.
例如,我正在尝试这样做:
For example I am trying to do this:
跟踪首先使用实体框架代码自动创建和修改的字段
要设置对DbContext中实体的跟踪.
To setup tracking on entities in the DbContext.
这是我的ApplicationDbContext,但我不断收到错误消息,说_httpContextAccessor是null:
Here is my ApplicationDbContext but I keep getting an error saying _httpContextAccessor is null:
private readonly IHttpContextAccessor _httpContextAccessor; public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IHttpContextAccessor httpContextAccessor) : base(options) { _httpContextAccessor = httpContextAccessor; }推荐答案
尝试注入 IHttpContextAccessor 接口
您甚至可以通过创建服务以仅提供所需的信息(这是当前登录的用户名)
You can even abstract it further by creating a service to provide just the information you want (Which is the current logged in username)
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才能注入它:
You need to setup IHttpContextAccessor now in Startup.ConfigureServices in order to be able to inject it:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); //OR //services.AddHttpContextAccessor(); services.AddTransient<IUserResolverService, UserResolverService>();并根据需要将其传递到您的存储库,以记录相关的用户名
and pass that to your repository as needed to record associated username
更多推荐
将IHttpContextAccessor注入ApplicationDbContext ASP.NET Core 1.0
发布评论