Настройка 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 4

2 ответа:

II7 уже делает это, если пул приложений Managed Pipeline Mode установлен в Integrated, что является значением по умолчанию. В интегрированном режиме, ASP.NET обрабатывает все запросы, включая запросы для статических объектов.

Если вам нужно оставить пул приложений в Classic Mode, то вам нужно использовать те же методы, которые вы использовали бы в IIS 6 для явного создания обработчиков для различных статических расширений.

Дополнительная информация, основанная на комментариях : я думаю, что ваша недостающая часть создает HttpHandler для обработки другие расширения (.js, .css и др.). Без этого, значит ASP.NET будет использоваться обработка по умолчанию для этих типов файлов. Вы создадите ссылку на ваш обработчик в своей сети.конфиг. эта статья является примером создания HttpHandler для статических файлов.

Слава всем, но проблема была в совершенно другом пространстве.

VirtualPathProvider не может использоваться на предварительно скомпилированном веб-сайте. Я в бешенстве.