<modules runAllManagedModulesForAllRequests = "true" /> Signification

133

Je voulais savoir quel est le sens de

<modules runAllManagedModulesForAllRequests="true" />

J'utilise IIS 7.5 et j'ai une application Web simple. Dois-je écrire ceci dans mon fichier web.config. J'ai également écrit quelques gestionnaires http pour l'appel jquery ajax. J'utilise l'authentification par formulaire et asp.net 4.0.

Comment puis-je déterminer quel module je dois exécuter et lequel ne doit pas l'être?

शेखर
la source

Réponses:

122

Conditions préalables des modules:

Le moteur principal IIS utilise des conditions préalables pour déterminer quand activer un module particulier. Des raisons de performances, par exemple, peuvent déterminer que vous souhaitez uniquement exécuter des modules gérés pour les demandes qui vont également à un gestionnaire géré. La condition préalable dans l'exemple suivant ( precondition="managedHandler") active uniquement le module d'authentification par formulaires pour les demandes qui sont également gérées par un gestionnaire géré, telles que les demandes aux fichiers .aspx ou .asmx:

<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />

Si vous supprimez l'attribut precondition="managedHandler", l'authentification par formulaire s'applique également au contenu qui n'est pas servi par des gestionnaires gérés, tels que .html, .jpg, .doc, mais également pour les extensions ASP (.asp) ou PHP (.php) classiques. Consultez « Comment tirer parti du pipeline intégré IIS » pour un exemple d'activation des modules ASP.NET pour s'exécuter pour tout le contenu.

Vous pouvez également utiliser un raccourci pour permettre à tous les modules gérés (ASP.NET) de s'exécuter pour toutes les demandes de votre application, quelle que soit la managedHandlercondition préalable " ".

Pour permettre à tous les modules gérés de s'exécuter pour toutes les requêtes sans configurer chaque entrée de module pour supprimer la managedHandlercondition préalable " ", utilisez la runAllManagedModulesForAllRequestspropriété dans la <modules>section:

<modules runAllManagedModulesForAllRequests="true" />    

Lorsque vous utilisez cette propriété, la managedHandlercondition préalable " " n'a aucun effet et tous les modules gérés s'exécutent pour toutes les demandes.

Vue d'ensemble copiée à partir des modules IIS: conditions préalables

Kapil Khandelwal
la source
est-il bon d'exécuter tous les modèles pour toute la demande ou je serai plus précis là-bas. Cela affecte-t-il la vitesse de l'application?
शेखर
2
Oui, il y aura un problème de performance. Vous devriez utiliser la précondition à la place.
Kapil Khandelwal
3
alors comment devrais-je décider quel module je dois utiliser et lequel ne pas utiliser.
शेखर
6
Une question complémentaire. Je vois qu'il est également possible d'activer des modules séparés, au lieu de tous. Voir ma question ( stackoverflow.com/questions/20998816/… ), la solution qu'il y avait à ajouter <modules runAllManagedModulesForAllRequests="true">. Mais je vois maintenant que cela pourrait créer des frais généraux. Alors, y a-t-il un module spécifique responsable que je peux activer pour obtenir le point "." dans MVC WebAPI Url, au lieu de les activer tous avec <modules runAllManagedModulesForAllRequests="true">? S'agit-il par exemple du module "UrlAuthorization"?
Yves Schelpe
l'ajout de la section de balises modules fonctionne pour moi. J'utilise MVC 5, .net framework 4.5.0, IIS 7 et Windows Server 2008
gavin
-9

ajoutez le code ci-dessous dans web.config

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer> 
hossein.sharifipour
la source
4
pourquoi je voudrais ajouter?
शेखर