首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有web.configs核等效的继承ASP.NET

具有web.configs核等效的继承ASP.NET
EN

Stack Overflow用户
提问于 2018-03-02 13:05:07
回答 1查看 1.1K关注 0票数 0

我的公司正在探索ASP.NET核心。我们目前使用的是ASP.NET Web 2&MVC5.2.2。我们使用以下配置在IIS下部署应用程序:

VirtualDirectory1 (带有连接字符串和其他非特定信息的web.config)

  • App1 (应用程序专用web.config)
  • App2 (应用程序专用web.config)
  • Api1 (api专用web.config)
  • Api2 (api专用web.config)

VirtualDirectory2 (带有连接字符串和其他非特定信息的web.config)

  • App1 (应用程序专用web.config)
  • App2 (应用程序专用web.config)
  • Api1 (api专用web.config)
  • Api2 (api专用web.config)

如您所知,每个应用程序或API从IIS下的父web.config继承配置,因此每个应用程序或API都继承父连接字符串。我们在服务器上使用每个应用程序的一个副本。我们能否以同样的方式部署ASP.NET核心应用程序?

我找到了关于嵌套对象和特定于环境的AppSettings.json配置的AppSettings.json文章,但这似乎不是答案。

更新1:

以上是一个多租户配置,其中每个虚拟目录都是一个租户。每个虚拟目录根目录下的web.config包含虚拟目录下所有应用程序的连接字符串。

我读到,web.config必须存在一个ASP.NET核心应用程序才能在ASP.NET下工作。

https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/index?tabs=aspnetcore2x#webconfig-file

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?tabs=basicconfiguration#webconfig-file

所以我想知道连接字符串对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,但将其作为应用程序添加到每个租户的虚拟目录中。结果是,我们有一个应用程序的副本,多个实例,没有多租户管道。

EN

回答 1

Stack Overflow用户

发布于 2018-03-02 13:20:35

ASP.NET Core不绑定到IIS,因此与ASP.NET的方法不一样。但是,如果您愿意,可以通过将公共设置移动到某些SharedSettings.json并使用此方法来实现类似的方法。

代码语言:javascript
复制
.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配置文件

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49069722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档