Я искал высоко и низко и до сих пор не могу найти определенного ответа.
Как настроить 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 для этого.