Blake Rivell Blake Rivell -4 years ago 572
C# Question

Injecting IHttpContextAccessor into ApplicationDbContext ASP.NET Core 1.0

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:

Track Created and Modified fields Automatically with Entity Framework Code First

To setup tracking on entities in the


Here is my
but I keep getting an error saying

private readonly IHttpContextAccessor _httpContextAccessor;

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IHttpContextAccessor httpContextAccessor)
: base(options)
_httpContextAccessor = httpContextAccessor;

Answer Source

Try injecting the IHttpContextAccessor Interface

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";

You need to setup IHttpContextAccessor now in Startup.ConfigureServices in order to be able to inject it:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddTransient<IUserResolverService, UserResolverService>();

and pass that to your repository as needed to record associated username

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download