Sto autenticando le richieste HTTP nel middleware interrogando i dati nel database, e per farlo devo configurare ApplicationDbContext con i dati nella richiesta HTTP. Come posso raggiungere la richiesta HTTP da ApplicationDbContext.OnConfiguring? (Nucleo di base di ASP .NET core / Entity)
middleware
public class TeamAuthentication
{
public async Task Invoke(HttpContext context, ApplicationDbContext db)
{
My.CheckToken(db);
// ...
DbContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
private ILoggerFactory loggerFactory;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, ILoggerFactory _loggerFactory)
: base(options)
{
loggerFactory = _loggerFactory;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// how to reach HttpContext here ?
// ...
Come hai già trovato, EF supporta l'utilizzo di DbContext con un contenitore di iniezione delle dipendenze. Inietti IHttpContextAccessor
nelle tue dipendenze e utilizzalo per ottenere l'attuale HttpContext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
private readonly ILoggerFactory _loggerFactory;
private readonly IHttpContextAccessor _contextAccessor;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, ILoggerFactory loggerFactory, IHttpContextAccessor contextAccessor)
: base(options)
{
_loggerFactory = loggerFactory;
_contextAccessor = contextAccessor;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// use _contextAccessor.HttpContext here
...
}
E non dimenticare di registrare IHttpContextAccessor
in DI in ConfigureServices come " Il servizio IHttpContextAccessor non è registrato per impostazione predefinita "
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
...
}