2010-05-20 3 views
3

Je suis en train de jouer avec l'organisation du contrôleur et j'ai rencontré un problème.asp.net mvc route s'affrontant avec le chemin physique dans IIS7

Si j'ai la structure physique suivante

/Home/HomeController.cs 
/Home/Index.aspx 
/Home/About.aspx 

et je demande l'URI:

/Home/Index 

-je obtenir un 403 Directory Listing Denied :(

(im en utilisant un IControllerFactory personnalisé et IViewEngine à regardez dans ce chemin non-par défaut)

Pourquoi est-ce h appétissant? (Je sais que le 403 est parce qu'il frappe le dossier /Home, mais pourquoi frappe-t-il le dossier?)

Pourquoi le module UrlRoutingModule n'écrit-il pas la route et laisse le contrôleur prendre la demande?

Application_BeginRequest se déclenche, mais il semble alors renvoyer le contrôle à IIS pour essayer de servir à partir du système de fichiers.

Est-ce que le paramètre UrlRoutingModule est défini par défaut sur un chemin physique s'il existe avant la réécriture?

Existe-t-il un moyen de faire fonctionner ce système?

N.B. S'il vous plaît ne suggèrent pas la relocalisation de mes contrôleurs etc. Je sais que cela est une option évidente, mais ce n'est pas la question;)

Utilisation IIS7 En mode intégré

Merci

Répondre

4

Parce que l'abstraction de routage acheminer uniquement une demande qui n'a pas de fichier équivalent sur le disque.

Vous n'avez pas d'autre choix que de renommer la structure de votre dossier.

- Édition Non, vous pouvez en fait désactiver cette "fonctionnalité" en définissant la propriété RouteExistingFiles sur RouteCollection.

+0

meh :(ok merci –

1

Le module de routage a, en effet, une préférence pour les fichiers réels s'ils existent. Il semble qu'il ne doit pas non plus dérouter après une vérification d'accessibilité échouée.

Vous avez compris que le fait d'avoir des contrôleurs/vues séparés renforce la séparation des préoccupations centrales à une architecture MVC, n'est-ce pas? Je serais inquiet de garder les contrôleurs/vues dans le même dossier peut confondre les choses pour les développeurs plus tard.

+0

hmm Savez-vous où ce code de "préférence" vit? Je suis allé sur un safari réflecteur, mais un lion me eated :( –

+0

System.Web.Routing.RouteCollection.GetRouteData (HttpContextBase) – SerialSeb

Questions connexes