ASP.NET 5在Startup类的ConfigureServices中访问上下文或请求信息

时间:2015-08-14 11:54:23

标签: c# asp.net asp.net-core

在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"];
        });

...

2 个答案:

答案 0 :(得分:1)

启动是针对每个应用程序执行一次的配置,而不是每个请求一次。如果您需要基于每个请求执行某些操作,则应该在MVC / API控制器或中间件中执行此操作。

答案 1 :(得分:1)

当前HttpContexthosting engine设置。

引擎构建应用程序之前的few lines,这意味着在ConfigureServices可用之前已调用ConfigureHttpContext

这是有道理的,因为Startup类中的应用程序配置仅在应用程序启动时调用,而不是每个请求都会调用。