Configurer IIS7 au serveur de contenu statique dans ASP.NET Runtime
-
25-09-2019 - |
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.
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.