J'ai donc une route comme celle-ci dans mon application MVC 3 fonctionnant sous IIS 7 :
routes.MapRoute(
"VirtualTourConfig",
"virtualtour/config.xml",
new { controller = "VirtualTour", action = "Config" }
);
L'astuce est qu'un fichier existe réellement à l'adresse /virtualtour/config.xml. Il semble que la requête renvoie simplement le fichier xml à cet emplacement au lieu d'atteindre la route, qui traite le XML, effectue quelques modifications et renvoie un XmlResult personnalisé.
Avez-vous des suggestions sur la façon dont je peux dire à mon application de frapper l'itinéraire et non le fichier réel dans le cas où le fichier existe sur le disque ?
EDITAR: Il semble que je puisse utiliser routes.RouteExistingFiles = true;
dans la méthode RegisterRoutes de Global.asax pour indiquer à l'application d'ignorer les fichiers sur disque. Cependant, cette méthode définit le drapeau de manière globale et interrompt de nombreuses autres requêtes au sein de l'application. Par exemple, je veux toujours que les appels à /assets/css/site.css renvoient le fichier CSS sans avoir à configurer spécifiquement des routes pour chaque actif statique. La question est donc de savoir s'il existe un moyen de le faire par route.