Inspiré de ce message, qui m'a rappellé que je n'avais pas parlé de ce problème qui m'était pourtant arrivé.

Il arrive que vous ayez besoin d'avoir une application web située sous un autre (répertoire virtuel).

Problème : votre application située virtuellement en dessous héritera automatiquement du web.config de l'application parente. Avec tous les problèmes qui en découlent : déclaration de paramètres en doublons (chaînes de connexions, appSettings, etc.), déclaration de types dont l'assembly n'est pas présente, etc.

Exemple (pompé sur l'autre message) :

<httpModules>

  <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>

  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</httpModules>

Avec une telle déclaration dans votre site racine, toutes les applications descendantes se retrouveront avec les extensions ajax déclarées. (Peu importe la version du framework d'ailleurs)

Première solution trouvée : celle consistant à supprimer les anciennes déclarations à l'aide d'un <clear /> (là où c'est supporté).

<httpModules>

  <clear/>

</httpModules>

Sauf qu'il y a une autre solution, liée à cette fameuse balise <location /> que l'on utilise souvent pour spécifier des droits sur une page spécifique.

Il suffit en fait d'utiliser l'attribut inheritInChildApplications="false" sur une balise location avec path="." dans votre web.config racine pour pouvoir ainsi y insérer des éléments de configuration qui ne seront pas hérités par les applications descendantes.

<location path="." inheritInChildApplications="false">

  <system.web>
    <httpModules>

      ...

    </httpModules>

  </system.web>
</location>

Ainsi, si vous avez des sections dont vous ne souhaitez surtout pas que les applications descendantes héritent (par prévention), il vous suffit de les déclarer dans cette section.

Laissez un commentaire