如何从ApplicationDbContext.OnConfiguring获取HTTP上下文?
问题描述:
我通过查询数据库中的数据来验证中间件中的HTTP请求,为此我需要使用HTTP请求中的数据配置ApplicationDbContext。我如何从ApplicationDbContext.OnConfiguring获得HTTP请求? (ASP .NET核心/实体框架的核心)如何从ApplicationDbContext.OnConfiguring获取HTTP上下文?
中间件
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 ?
// ...
答
正如你已经发现,EF支持使用的DbContext与依赖注入容器。在注入你的依赖IHttpContextAccessor
,并用它来获得当前的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
...
}
而且不要忘记在ConfigureServices注册IHttpContextAccessor
到DI为“The IHttpContextAccessor service is not registered by default”
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
...
}