使用设置配置 asp.net 个核心
Configuration of asp.net core using settings
我正在评估 asp.net 核心和 .net 核心,但我还不确定某些事情。过去可以使用开箱即用的 web.config 配置许多组件。
举几个例子:
- 有成员提供者,我可以实现许多提供者,但我可以稍后配置应该使用哪个提供者。这取决于用例。现在我应该使用 asp.net 身份 - 但我只能找到在源代码中执行的配置。
- 身份验证相同。我可以定义 "CookieAuthentication" 并且必须在源代码中设置名称、登录路径或超时。过去我可以通过 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();
}
}
我正在评估 asp.net 核心和 .net 核心,但我还不确定某些事情。过去可以使用开箱即用的 web.config 配置许多组件。 举几个例子:
- 有成员提供者,我可以实现许多提供者,但我可以稍后配置应该使用哪个提供者。这取决于用例。现在我应该使用 asp.net 身份 - 但我只能找到在源代码中执行的配置。
- 身份验证相同。我可以定义 "CookieAuthentication" 并且必须在源代码中设置名称、登录路径或超时。过去我可以通过 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();
}
}