将 IHttpContextAccessor 注入 ApplicationDbContext ASP.NET Core 1.0

Injecting IHttpContextAccessor into ApplicationDbContext ASP.NET Core 1.0(将 IHttpContextAccessor 注入 ApplicationDbContext ASP.NET Core 1.0)
本文介绍了将 IHttpContextAccessor 注入 ApplicationDbContext ASP.NET Core 1.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图弄清楚如何在 ASP.NET 控制器之外访问当前登录的用户名.

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 is 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)