Question

Je cherchai haut un bas et ne peut toujours pas trouver une réponse définitive.

Comment configurer IIS 7.0 ou une application Web dans IIS afin que ASP.NET Runtime gérer tous demandes - y compris les fichiers statiques comme *.js, de *.gif, etc

Ce que je suis en train de faire est la suivante.

Nous avons une sorte de site de SaaSy, que nous pouvons pour chaque client « marque ». « Image de marque » signifie le développement d'une page maître personnalisée et en utilisant un tas de *.css et d'autres images.

Tout naturellement, j'utilise VirtualPathProvider, qui fonctionne comme ceci:

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

L'idée de base est la suivante: nous avons un dossier branding dans notre webapp, qui à son tour contient des dossiers pour chaque « marque », avec « marque » étant égal à un nom d'hôte. Autrement dit, les demandes de http://foo.example.com/ doivent utiliser des fichiers statiques à partir branding/foo_example_com, alors que http://bar.example.com/ doit utiliser le contenu de branding/bar_example_com.

Maintenant, ce que je veux IIS à faire est de transmettre toutes les demandes de fichiers statiques à StaticFileHandler, qui serait alors utiliser toute cette « infrastructure » et servir les fichiers corrects. Cependant, comme je pourrais essayer, je ne peux pas configurer IIS pour le faire.

Était-ce utile?

La solution

II7 fait déjà que si est réglé le Managed Pipeline Mode du pool d'applications à Integrated qui est la valeur par défaut. En mode intégré, ASP.NET gère toutes les demandes, y compris celles pour les objets statiques.

Si vous devez quitter votre pool d'applications Classic Mode alors vous devez utiliser les mêmes techniques que vous utiliseriez dans IIS 6 pour créer explicitement des gestionnaires pour les différentes extensions statiques.

Informations supplémentaires en fonction des commentaires : Je pense que votre pièce manquante crée un HttpHandler pour gérer les autres extensions (.js, Css, etc.). Sans cela, alors ASP.NET utilisera le traitement par défaut pour ces types de fichiers. Vous vous créez une référence au gestionnaire dans votre web.config. Cet article est un exemple de la création d'un HttpHandler pour les fichiers statiques.

Autres conseils

Félicitations à tout le monde, mais le problème était dans l'espace totalement différent.

VirtualPathProvider ne peut pas être utilisé dans un site web pré-compilé. Je suis furieux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top