Настройка IIS7 для сервера статического содержимого через ASP.NET время выполнения
Я искал высоко и низко и все еще не могу найти определенного ответа.
Как настроить 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
внутри нашего веб-приложения, которая, в свою очередь, содержит папки для каждого "бренда", причем "бренд" равен имени хоста. То есть запросы к http://foo.example.com/
должны использовать статические файлы из branding/foo_example_com
, тогда как http://bar.example.com/
должны использовать содержимое из branding/bar_example_com
.
Теперь я хочу, чтобы IIS пересылал все запросы к статическим файлам в StaticFileHandler
, который затем будет использовать это целое "инфраструктура" и подавать правильные файлы. Однако, как бы я ни старался, я не могу настроить IIS для этого.
2 ответа:
II7 уже делает это, если пул приложений
Managed Pipeline Mode
установлен вIntegrated
, что является значением по умолчанию. В интегрированном режиме, ASP.NET обрабатывает все запросы, включая запросы для статических объектов.Если вам нужно оставить пул приложений в
Classic Mode
, то вам нужно использовать те же методы, которые вы использовали бы в IIS 6 для явного создания обработчиков для различных статических расширений.Дополнительная информация, основанная на комментариях : я думаю, что ваша недостающая часть создает
HttpHandler
для обработки другие расширения (.js, .css и др.). Без этого, значит ASP.NET будет использоваться обработка по умолчанию для этих типов файлов. Вы создадите ссылку на ваш обработчик в своей сети.конфиг. эта статья является примером создания HttpHandler для статических файлов.