ASP.NET 核心 (Blazor) 使用 Url 或虚拟路径在启动时加载客户特定配置
ASP.NET Core (Blazor) Loading customer specific configuration on startup by using Url or Virtual Path
我们的应用程序(.NET Core 3.1 中的服务器端 Blazor)在 Windows 服务器上的 IIS 中运行。我们在 IIS 中有多个站点 运行 相同的应用程序,但针对不同的客户具有不同的 URL。
在 (ConfigureServices) 中启动时,我们希望从配置文件加载应用程序的客户配置。这样我们就可以拥有应用程序的多个实例 运行 不同的配置。从数据库加载此信息不是一个选项,因为配置包含连接到数据库的详细信息。
在 ASP.NET 框架中,我们可以访问全局中的虚拟路径或(子)域名,然后根据该信息加载配置。
我们需要在我们的 ASP.Net 核心应用程序或其他解决方法中使用相同的访问权限。
有没有达到同样效果的?
区分网站的更好方法是 URL。 IIS中各站点绑定的域名和端口不再重复
您可以参考这些代码在startup.cs中得到URL。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IHostApplicationLifetime lifetime,IServiceProvider serviceProvider)
{
...other code...
lifetime.ApplicationStarted.Register(
() => logAddresses(app.ServerFeatures));
}
static void logAddresses(IFeatureCollection features)
{
var addressFeature = features.Get<IServerAddressesFeature>();
if (addressFeature != null)
{
foreach(var address in addressFeature.Addresses)
{
Console.Out.WriteLine(address);
}
}
}
我能够从环境中获取应用程序池 ID,然后将配置部分加载为应用程序配置:
var appPool = Environment.GetEnvironmentVariable( "APP_POOL_ID", EnvironmentVariableTarget.Process )
van sectionname = SomeMagicToParseAppPool( appPool );
var config = Configuration.GetSection( sectionName );
if ( config == null ) throw new ApplicationException($" Cannot find config section for {host}");
services.Configure<ApplicationSettings>( config );
这允许我为不同的站点加载不同的配置。唯一的缺点是每个应用程序都需要自己的应用程序池。但这已经是一项要求,因为 .NET Core ASP.NET 应用程序必须 运行 在应用程序池中不受管理。
我们的应用程序(.NET Core 3.1 中的服务器端 Blazor)在 Windows 服务器上的 IIS 中运行。我们在 IIS 中有多个站点 运行 相同的应用程序,但针对不同的客户具有不同的 URL。
在 (ConfigureServices) 中启动时,我们希望从配置文件加载应用程序的客户配置。这样我们就可以拥有应用程序的多个实例 运行 不同的配置。从数据库加载此信息不是一个选项,因为配置包含连接到数据库的详细信息。
在 ASP.NET 框架中,我们可以访问全局中的虚拟路径或(子)域名,然后根据该信息加载配置。
我们需要在我们的 ASP.Net 核心应用程序或其他解决方法中使用相同的访问权限。 有没有达到同样效果的?
区分网站的更好方法是 URL。 IIS中各站点绑定的域名和端口不再重复
您可以参考这些代码在startup.cs中得到URL。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IHostApplicationLifetime lifetime,IServiceProvider serviceProvider)
{
...other code...
lifetime.ApplicationStarted.Register(
() => logAddresses(app.ServerFeatures));
}
static void logAddresses(IFeatureCollection features)
{
var addressFeature = features.Get<IServerAddressesFeature>();
if (addressFeature != null)
{
foreach(var address in addressFeature.Addresses)
{
Console.Out.WriteLine(address);
}
}
}
我能够从环境中获取应用程序池 ID,然后将配置部分加载为应用程序配置:
var appPool = Environment.GetEnvironmentVariable( "APP_POOL_ID", EnvironmentVariableTarget.Process )
van sectionname = SomeMagicToParseAppPool( appPool );
var config = Configuration.GetSection( sectionName );
if ( config == null ) throw new ApplicationException($" Cannot find config section for {host}");
services.Configure<ApplicationSettings>( config );
这允许我为不同的站点加载不同的配置。唯一的缺点是每个应用程序都需要自己的应用程序池。但这已经是一项要求,因为 .NET Core ASP.NET 应用程序必须 运行 在应用程序池中不受管理。