我的公司正在探索ASP.NET Core。我们目前使用的是ASP.NET Web API 2& MVC 5.2.2。我们使用以下配置在IIS下部署应用程序:
VirtualDirectory1(带有连接字符串和其他非特定信息的web.config)
VirtualDirectory2(带有连接字符串和其他非特定信息的web.config)
如您所知,每个应用程序或API都从IIS下的父web.config继承配置,因此每个应用程序或API都继承父连接字符串。我们在服务器上使用每个应用程序的单个副本。我们可以用相同的方式部署ASP.NET Core应用程序吗?
我在嵌套对象和特定于环境的AppSettings.json配置上找到了StackOverflow文章,但这似乎不是答案。
更新1:
以上是多租户配置,其中每个虚拟目录都是租户。每个虚拟目录的根目录下的web.config包含虚拟目录下所有应用程序使用的连接字符串。
我读到必须存在一个web.config文件,ASP.NET Core应用程序才能在IIS下运行。
所以我想知道连接字符串是否对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,但在每个租户的虚拟目录下将其添加为应用程序。结果是我们有一个应用程序副本,多个实例,没有多租户管道。
答案 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