我的公司正在探索ASP.NET核心。我们目前使用的是ASP.NET Web 2&MVC5.2.2。我们使用以下配置在IIS下部署应用程序:
VirtualDirectory1 (带有连接字符串和其他非特定信息的web.config)
VirtualDirectory2 (带有连接字符串和其他非特定信息的web.config)
如您所知,每个应用程序或API从IIS下的父web.config继承配置,因此每个应用程序或API都继承父连接字符串。我们在服务器上使用每个应用程序的一个副本。我们能否以同样的方式部署ASP.NET核心应用程序?
我找到了关于嵌套对象和特定于环境的AppSettings.json配置的AppSettings.json文章,但这似乎不是答案。
更新1:
以上是一个多租户配置,其中每个虚拟目录都是一个租户。每个虚拟目录根目录下的web.config包含虚拟目录下所有应用程序的连接字符串。
我读到,web.config必须存在一个ASP.NET核心应用程序才能在ASP.NET下工作。
所以我想知道连接字符串对ASP.NET核心应用程序是否是可见的。
更新2: A.F.A.I.K,web.config可以从应用程序内容根目录加载,但是我们需要的内容位于虚拟目录中。一位AspNetCoreModule维护者告诉我,环境变量继承(在这个场景中适用)是不可靠的,并且不存在访问其他继承配置的管道。web.config仅用于为ASP.NET核心应用程序配置IIS。
最好的解决方案似乎是像Saaskit那样使用主机头。
https://github.com/saaskit/saaskit
这要求我们更改IIS部署,并为每个租户添加一个DNS记录,但对于继承的web.config文件来说,这是次好的选择。我希望ASP.NET核心团队考虑对继承的设置引入一种ASP.NET核心方法,使我们能够继承web.configs所做的工作。
将特定于租户的设置放到虚拟目录中的文件中是有条不紊的,但它大大简化了对多租户的支持。我们的MVC和Web代码不需要额外的任何东西。它只是通过ConfigurationManager检索设置,就像不存在其他租户一样。
我们在IIS下有一个网站,每个租户有一个虚拟目录。每个租户都通过其URI进行访问。
https://myfqdn.com/tenant1/myapp
https://myfqdn.com/tenant2/myapp
tenant1和tenant2是包含租户特定web.config的虚拟目录,因此调用https://myfqdn.com/tenant1/myapp加载租户1的web.config,myapp继承请求的设置。/tenant2 2/myapp加载一个不同的web.config。
Myapp不知道在每个请求中从哪个虚拟目录调用它。我们在一个物理位置安装myapp,但将其作为应用程序添加到每个租户的虚拟目录中。结果是,我们有一个应用程序的副本,多个实例,没有多租户管道。

发布于 2018-03-02 13:20:35
ASP.NET Core不绑定到IIS,因此与ASP.NET的方法不一样。但是,如果您愿意,可以通过将公共设置移动到某些SharedSettings.json并使用此方法来实现类似的方法。
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
var sharedFolder = Path.Combine(env.ContentRootPath, "..", "Shared");
config
.AddJsonFile(Path.Combine(sharedFolder, "SharedSettings.json"), optional: true) // When running using dotnet run
.AddJsonFile("SharedSettings.json", optional: true) // When app is published
.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
config.AddEnvironmentVariables();
})在这里阅读更多信息:在appsettings.json内核中的项目之间共享ASP.NET配置文件
https://stackoverflow.com/questions/49069722
复制相似问题