Bla*_*ell 5 c# entity-framework asp.net-core-mvc asp.net-core asp.net-core-1.0
我试图弄清楚如何访问ASP.NET控制器之外的当前登录用户名.
例如,我试图这样做:
设置跟踪实体的跟踪DbContext.
这是我的,ApplicationDbContext但我一直收到错误的说法_httpContextAccessor是null:
private readonly IHttpContextAccessor _httpContextAccessor;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IHttpContextAccessor httpContextAccessor)
: base(options)
{
_httpContextAccessor = httpContextAccessor;
}
Run Code Online (Sandbox Code Playgroud)
尝试注入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";
}
}
Run Code Online (Sandbox Code Playgroud)
你需要设置IHttpContextAccessor现在Startup.ConfigureServices为了能够注入它:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//OR
//services.AddHttpContextAccessor();
services.AddTransient<IUserResolverService, UserResolverService>();
Run Code Online (Sandbox Code Playgroud)
并根据需要将其传递到您的存储库以记录相关的用户名
@Nkosi 有正确的答案,但请注意 IHttpContextAccessor 现在位于命名空间下:
Microsoft.AspNetCore.Http;
Run Code Online (Sandbox Code Playgroud)
不再下:
Microsoft.AspNet.Http;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5670 次 |
| 最近记录: |