2010-02-09 2 views
1

J'utilise le routage d'URL (avec WebForms) dans le format suivant:routage d'URL et web.config de dossiers imbriqués

http://host/project/{projectid}/{pageName} 

Une autre option est que l'utilisateur est à un sous-application référait:

http://host/project/{projectid}/{application}/{pageName} 

La sous-application n'est pas une nouvelle application Web, simplement un répertoire virtuel.
Ma sous-application possède un fichier web.config, qui contient des appset/connstrings spécifiques.

Tout fonctionne correctement sans le routage URL.

Cependant, lorsque je demande une URL dans le formulaire routé, le fichier web.config de la sous-application n'est pas traité et j'obtiens une référence nulle sur tous les appsettings/connstrings (via ConfigurationManager).

Voici le code dans mon gestionnaire personnalisé:

string path = String.Format(_pagesFormat, application, pageName); 
return (IHttpHandler) BuildManager.CreateInstanceFromVirtualPath(path, typeof(Page)); 

Il fonctionne si je changerais ma route vers http://host/{application}/{projectid}/{pageName}
Cela déclenche probablement IIS pour charger le web.config du répertoire virtuel. Puis-je en quelque sorte forcer le chargement des paramètres du web.config imbriqué?

EDIT:
Cette personne a un problème similaire:
http://forums.asp.net/p/1452479/3317775.aspx

Toutes les idées?

Répondre

1

Pour une raison quelconque la balise system.web et quelques autres balises sont en cours de traitement par le
web.config (qui réside dans le répertoire virtuel).

J'ai décidé de mettre mes paramètres d'application et les paramètres de chaîne de connexion en deux fichiers séparés dans la racine:

  • web.config à la racine (IS, la compilation, la configuration du gestionnaire)
  • web. appSettings.config dans la racine
  • web.Connections.config dans la racine

  • web.config par répertoire virtuel (contrôle de l'utilisateur, la configuration du masterpage)