Pergunta

Eu procurei alto e ainda não consigo encontrar uma resposta definitiva.

Como faço para configurar o IIS 7.0 ou um aplicativo da web no IIS para que o tempo de execução do ASP.NET lidará com tudo pedidos - incluindo os arquivos estáticos como *.js, *.gif, etc?

O que estou tentando fazer é o seguinte.

Temos uma espécie de site de saasy, que podemos "marcar" para cada cliente. "Branding" significa desenvolver uma página mestre personalizada e usar um monte de *.css e outras imagens.

Naturalmente, estou usando VirtualPathProvider, que opera assim:

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;
}

A idéia básica é a seguinte: temos um branding Pasta dentro do nosso WebApp, que por sua vez contém pastas para cada "marca", com a "marca" igual ao nome do host. Isto é, pedidos para http://foo.example.com/ deve usar arquivos estáticos de branding/foo_example_com, enquanto http://bar.example.com/ deve usar o conteúdo de branding/bar_example_com.

Agora, o que eu quero que eu faça é encaminhar todas as solicitações para arquivos estáticos para StaticFileHandler, que então usaria toda essa "infraestrutura" e serviria arquivos corretos. No entanto, por mais que eu possa, não posso configurar o IIS para fazer isso.

Foi útil?

Solução

Ii7 já faz isso se o pool de aplicativos Managed Pipeline Mode está configurado para Integrated qual é o padrão. No modo integrado, o ASP.NET lida com todas as solicitações, incluindo as de objetos estáticos.

Se você tiver que deixar seu pool de aplicativos em Classic Mode Então você precisa usar as mesmas técnicas que usaria no IIS 6 para criar explicitamente manipuladores para as várias extensões estáticas.

Informações adicionais com base em comentários: Eu acho que sua peça faltando está criando um HttpHandler para lidar com as outras extensões (.js, .css, etc.). Sem isso, o ASP.NET usará o manuseio padrão para esses tipos de arquivos. Você criaria uma referência ao seu manipulador em seu web.config. Este artigo é um exemplo de criação de um httphandler para arquivos estáticos.

Outras dicas

Parabéns a todos, mas o problema estava em espaço totalmente diferente.

VirtualPathProvider não pode ser usado em um site pré-compilado. Estou furioso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top