使用设置配置 asp.net 个核心

Configuration of asp.net core using settings

我正在评估 asp.net 核心和 .net 核心,但我还不确定某些事情。过去可以使用开箱即用的 web.config 配置许多组件。 举几个例子:

有什么方法可以从配置文件中开箱即用地部分配置这些东西吗?或者这不再受支持,我必须自己实现这个配置?在过去,这是一种非常舒适的方式。

在 ASP.NET Core 中,Web.config 文件仅用于 IIS 配置,您不能将其用于应用程序配置,但是您可以使用新的、更好的、更灵活的配置选项。

您可以使用多个配置源,但在本例中我使用的是 json。这些示例来自我的 SimpleAuth 项目中的工作代码。

您可以在启动时从配置文件中进行配置。

首先,您添加一个 json 格式的配置文件,映射到您的 class。可以看到my example class here, and the json file it maps from here

builder.AddJsonFile("simpleauthsettings.json", optional: true);

然后,在 ConfigureServices 方法中,您将 class 配置为从配置系统连接,如图所示

services.Configure<SimpleAuthSettings>(Configuration.GetSection("SimpleAuthSettings"));

然后将 class 的 IOptions 访问器添加到 Startup.cs 中的 Configure 方法的方法签名中 依赖注入将为您将其注入该方法,以便您可以在那里使用它来配置东西。具体来说,我正在从我的设置对象中设置 cookie 身份验证方案和名称。

值得注意的是,你可以在Configure方法签名中添加任何你想要的东西,只要是在ConfigureServices方法中注册过的东西,DI就可以为你注入。

public class Startup
{
    public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

        // this file is the custom configuration file to hydrate my settings from
        builder.AddJsonFile("simpleauthsettings.json", optional: true);
        ....
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; set; }

    public void ConfigureServices(IServiceCollection services)
    {
        ....
        services.Configure<SimpleAuthSettings>(Configuration.GetSection("SimpleAuthSettings"));
        ....

    }

    // note that the DI can inject whatever you need into this method signature
    // I added IOptions<SimpleAuthSettings> authSettingsAccessor to the method signature
    // you can add anything you want as long as you register it in ConfigureServices
    public void Configure(
        IApplicationBuilder app, 
        IHostingEnvironment env, 
        ILoggerFactory loggerFactory,
        IOptions<SimpleAuthSettings> authSettingsAccessor  
        )
    {
        ...
        // Add cookie-based authentication to the request pipeline
        SimpleAuthSettings authSettings = authSettingsAccessor.Value;

        var ApplicationCookie = new CookieAuthenticationOptions
        {
            AuthenticationScheme = authSettings.AuthenticationScheme,
            CookieName = authSettings.AuthenticationScheme,
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            LoginPath = new PathString("/Login/Index"),
            Events = new CookieAuthenticationEvents
            {
                //OnValidatePrincipal = SecurityStampValidator.ValidatePrincipalAsync
            }
        };

        app.UseCookieAuthentication(ApplicationCookie);

        // authentication MUST be added before MVC
        app.UseMvc();
    }   
}