在Startup类中调用ConfigureServices方法时是否可以访问Context或Request信息?
我想要做的是根据网址或其他请求信息决定从数据库加载哪些Facebook或MS身份验证信息。
public void ConfigureServices(IServiceCollection services)
{
// Add Entity Framework services to the services container.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Configure the options for the authentication middleware.
// You can add options for Google, Twitter and other middleware as shown below.
// For more information see http://go.microsoft.com/fwlink/?LinkID=532715
services.Configure<FacebookAuthenticationOptions>(options =>
{
options.AppId = Configuration["Authentication:Facebook:AppId"];
options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});
services.Configure<MicrosoftAccountAuthenticationOptions>(options =>
{
options.ClientId = Configuration["Authentication:MicrosoftAccount:ClientId"];
options.ClientSecret = Configuration["Authentication:MicrosoftAccount:ClientSecret"];
});
...
答案 0 :(得分:1)
启动是针对每个应用程序执行一次的配置,而不是每个请求一次。如果您需要基于每个请求执行某些操作,则应该在MVC / API控制器或中间件中执行此操作。
答案 1 :(得分:1)
当前HttpContext
由hosting engine设置。
引擎构建应用程序之前的few lines,这意味着在ConfigureServices
可用之前已调用Configure
和HttpContext
。
这是有道理的,因为Startup
类中的应用程序配置仅在应用程序启动时调用,而不是每个请求都会调用。