ASP.NET核心等效项

时间:2018-03-02 13:05:08

标签: iis asp.net-core web-config

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

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

  • App1(特定于应用程序的web.config)
  • App2(特定于应用程序的web.config)
  • Api1(api specific web.config)
  • Api2(api specific web.config)

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

  • App1(特定于应用程序的web.config)
  • App2(特定于应用程序的web.config)
  • Api1(api specific web.config)
  • Api2(api specific web.config)

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

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

更新1:

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

我读到必须存在一个web.config文件,ASP.NET Core应用程序才能在IIS下运行。

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

https://docs.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 API代码不需要额外的东西。它只是通过ConfigurationManager检索设置,就好像没有其他租户存在一样。

我们在IIS下有一个网站,每个租户有一个虚拟目录。每个租户都可以通过其URI访问。

https://myfqdn.com/tenant1/myapp

https://myfqdn.com/tenant2/myapp

tenant1和tenant2是包含特定于租户的web.config的虚拟目录,因此调用https://myfqdn.com/tenant1/myapp会加载tenant1的web.config,myapp会继承其请求的设置。 / tenant2 / myapp加载不同的web.config。

Myapp不知道在每个请求中调用了哪个虚拟目录。我们在一个物理位置安装myapp,但在每个租户的虚拟目录下将其添加为应用程序。结果是我们有一个应用程序副本,多个实例,没有多租户管道。

enter image description here

1 个答案:

答案 0 :(得分:2)

using System.Drawing.Imaging; using System.IO; public static byte[] SaveImageToByteArray(Image image, int jpegQuality = 90) { using (var ms = new MemoryStream()) { var jpegEncoder = GetEncoder(ImageFormat.Jpeg); var encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, (long)jpegQuality); image.Save(ms, jpegEncoder, encoderParameters); return ms.ToArray(); } } private static ImageCodecInfo GetEncoder(ImageFormat format) { var codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.FormatID == format.Guid) { return codec; } } return null; } 未与ASP.NET Core绑定,因此相同的方法不会与IIS相同。但是,如果您希望将常用设置移动到某些ASP.NET并使用此方法,则可以实施类似的方法。

SharedSettings.json

在此处阅读更多内容:Sharing appsettings.json configuration files between projects in ASP.NET Core