Настройте IIS7 для сервера статического контента через время выполнения ASP.NET
-
25-09-2019 - |
Вопрос
Я искал высоко низкий и до сих пор не могу найти определенный ответ.
Как настроить IIS 7.0 или веб-приложение в IIS, чтобы выполнить время выполнения ASP.NET все запросы - включая статические файлы, такие как *.js
, *.gif
, так далее?
Что я пытаюсь сделать следующим образом.
У нас есть вид сайса SAASY, который мы можем «бренд» для каждого клиента. «Брендинг» означает разработку пользовательской главной страницы и используя кучу *.css
и другие изображения.
Вполне естественно, я использую VirtualPathProvider
, который работает так:
public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
if(PhysicalFileExists(virtualPath))
{
var virtualFile = base.GetFile(virtualPath);
return virtualFile;
}
if(VirtualFileExists(virtualPath))
{
var brandedVirtualPath = GetBrandedVirtualPath(virtualPath);
var absolutePath = HttpContext.Current.Server.MapPath(brandedVirtualPath);
Trace.WriteLine(string.Format("Serving '{0}' from '{1}'",
brandedVirtualPath, absolutePath), "BrandingAwareVirtualPathProvider");
var virtualFile = new VirtualFile(brandedVirtualPath, absolutePath);
return virtualFile;
}
return null;
}
Основная идея выглядит следующим образом: у нас есть branding
Папка внутри нашего WebApp, которая, в свою очередь, содержит папки для каждого «бренда», с «брендом», равным имени хоста. То есть просьбы http://foo.example.com/
должен использовать статические файлы из branding/foo_example_com
, в то время как http://bar.example.com/
следует использовать контент от branding/bar_example_com
.
Теперь, что я хочу сделать, - это пересылать все запросы к статическим файлам StaticFileHandler
, Затем, что бы использовало всю целую «инфраструктуру» и подавать правильные файлы. Однако попробуйте, как я могу, я не могу настроить IIS, чтобы сделать это.
Решение
II7 уже делает это, если бассейн приложения Managed Pipeline Mode
установлен в Integrated
что по умолчанию. В интегрированном режиме ASP.NET обрабатывает все запросы, в том числе для статических объектов.
Если вы должны оставить свой пул приложения в Classic Mode
Затем вам необходимо использовать те же методы, которые вы будете использовать в IIS 6, чтобы явно создавали обработчики для различных статических расширений.
Дополнительная информация на основе комментариев: Я думаю, что ваша недостающая часть создает HttpHandler
Для обработки других расширений (.js, αcs и т. Д.). Без этого ASP.NET будет использовать обработку по умолчанию для этих типов файлов. Вы создадим ссылку на вас обработчик в вашем web.config. эта статья является примером создания HTTPhandler для статических файлов.
Другие советы
Кедо всем, но проблема была в совершенно другом пространстве.
VirtualPathProvider
не может быть использован в предварительно скомпилированном веб-сайте. Я яростный.