#asp.net-mvc #asp.net-core #asp.net-core-mvc #.net-5 #web-optimization
Вопрос:
ASP.NET 5 Основное приложение MVC обслуживает несколько сайтов с помощью вебоптимизатора LigerShark ( https://github.com/ligershark/WebOptimizer )
https://example.com/store1
https://example.com/store2
Все эти сайты должны обслуживаться из каталога wwwroot, содержащего одинаковые файлы для этих URL-адресов.
Сайты определены в файле hosts.json:
{
"EevaHosts": {
"example.com/store1": {}
"example.com/store2": {}
"example2.com": {}
}
}
Я попробовал приведенный ниже код, чтобы заставить WebOptimizer использовать один и тот же каталог wwwwroot для каждого сайта в Debian Linux, но получил исключение для https://example.com/store1/site.js
Не найдено подходящих файлов «/store1/js/site.js» существует в «/var/www/appbasedir/wwwroot/»
Как заставить веб-оптимизатор использовать один и тот же каталог wwwwroot для всех сайтов ? Если промежуточное программное обеспечение Weboptimizer удалено, статические файлы будут правильно размещены на сервере.
В StartUp.cs:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ ...
var eevakonf = new ConfigurationBuilder().AddJsonFile("hosts.json").Build();
foreach (var host1 in eevakonf.GetSection("EevaHosts").GetChildren())
{
if (!host1.Key.Contains("/"))
app.UseWebOptimizer();
else
app.UseWebOptimizer(env, new FileProviderOptions[] { new FileProviderOptions()
{
// example.com/store1 -> /store1
RequestPath = new PathString(RequestPathExtract(host1)),
FileProvider = env.WebRootFileProvider
}
});
}
// Using single call causes the same exception:
//HashSet<FileProviderOptions> fp = new();
//foreach (var host1 in eevakonf.GetSection("EevaHosts").GetChildren())
//{
// if (host1.Key.Contains("/"))
// fp.Add(new FileProviderOptions() {
// RequestPath = new PathString(RequestPathExtract(host1)) ,
// FileProvider = env.WebRootFileProvider
// });
//}
//app.UseWebOptimizer(env, fp.ToArray());
foreach (var host in eevakonf.GetSection("EevaHosts").GetChildren())
{
if (!host.Key.Contains("/"))
app.UseStaticFiles();
else
{
app.UseStaticFiles(new StaticFileOptions
{
RequestPath = new PathString(RequestPathExtract(host))
});
}
}
}
static string RequestPathExtract(IConfigurationSection host)
{
return "/" StrExtract(host.Key, "/");
}
static string StrExtract(string cSearchExpression, string cBeginDelim)
{
int nbpos = At(cBeginDelim, cSearchExpression);
return cSearchExpression[(nbpos cBeginDelim.Length - 1)..];
}
Комментарии:
1. Не уверен, что это имеет отношение к делу. Но webOptimizer не поддерживает .net core 5.0. Для меня это другая проблема, но я заметил это при создании пиплайнов azure.
2. github.com/ligershark/WebOptimizer является промежуточным программным обеспечением .NET Core. Он разработан для .NET Core и работает в .NET 5