Настройте IIS7 для сервера статического контента через время выполнения ASP.NET

StackOverflow https://stackoverflow.com/questions/2593932

Вопрос

Я искал высоко низкий и до сих пор не могу найти определенный ответ.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top