c# - 将 IHttpContextAccessor 注入(inject) ApplicationDbContext ASP.NET Core 1.0

标签 c# entity-framework asp.net-core asp.net-core-mvc asp.net-core-1.0

我想弄清楚如何在 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/

相关文章:

c# - 如何使用 Async/Await 进行进度报告

visual-studio-2010 - Entity Framework 不创建数据库

c# - 无法运行在运行时设置 DbContext 连接字符串并将项目与应用程序分开的 EF 迁移

c# - 如何在控制台应用程序中为连接字符串定义数据目录以使用 Entity Framework 代码优先迁移

.net - 使用.Net Entity Framework 删除具有子关系的实体问题

c# - 在 azure 上存储和使用现有数据保护 key

c# - .net 核心的 excel nuget 包

c# - 如何等待异步任务

c# - 您可以将数据绑定(bind)到包含 Silverlight 参数的属性吗?

c# - 具有依赖注入(inject)的 WinForms MVC