2012-09-07 4 views
0

J'ai commencé à apprendre (et à utiliser) le Monorail il y a quelques temps, et récemment, je me suis intéressé au routage. Malheureusement, la documentation qui l'entoure est assez éparse, mais j'ai réussi à obtenir des informations sur divers articles de blog, la plupart d'entre eux datant de 2 ans et plus. J'ai réussi à configurer le routage assez rapidement, MAIS j'ai réalisé que le moteur de routage de Monorail confond les fichiers .jpeg en tant que demandes de contrôleur/action QUAND ils ne sont pas trouvés.Le routage Monorail RC 2.1 pense qu'un fichier statique manquant (comme un .jpg) est un contrôleur/une action

Le fichier webconfig est assez standard:

<monorail useWindsorIntegration="false" defaultUrlExtension=".rails"> 
    <url useExtensions="true"/> 
    <controllers> 
     <assembly>NetTwitter.Web</assembly> 
    </controllers> 
    <viewcomponents> 
     <assembly>NetTwitter.Web</assembly> 
    </viewcomponents> 
    <viewEngine viewPathRoot="Views" customEngine="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine, Castle.MonoRail.Framework.Views.NVelocity"/> 
    </monorail> 
<system.web> 
    <httpHandlers> 
    <!-- block direct user access to template files --> 
     <add verb="*" path="*.vm" type="System.Web.HttpForbiddenHandler"/> 
     <add verb="*" path="*.boo" type="System.Web.HttpForbiddenHandler"/> 
     <add verb="*" path="*.st" type="System.Web.HttpForbiddenHandler"/> 
     <add verb="GET" path="*.css" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.js" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.jpg" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.gif" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.png" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.jpeg" type="System.Web.StaticFileHandler" /> 
     <add verb="*" path="*.rails" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework"/> 
    </httpHandlers> 
    <httpModules> 
     <add name="routing" type="Castle.MonoRail.Framework.Routing.RoutingModuleEx, Castle.MonoRail.Framework" /> 
    </httpModules> 

Comme l'initialisation du moteur de routage à l'intérieur du Global.asax:

public void Application_OnStart() 
     { 
      log4net.Config.XmlConfigurator.Configure(); 
      RoutingModuleEx.Engine.Add(
       new PatternRoute("<controller>/[action]")); 
     } 

L'erreur se dit assez clairement:

{"Contrôleur introuvable Zone: '' Nom du contrôleur: 'content'"}

Alors, que puis-je faire? Merci d'avance.

Répondre

0

Cela est dû au fait que vous utilisez RoutingModuleEx. Cela va réécrire l'URL avant que les httpHandlers réels soient comparés.

Et votre route est à général pour cela, probablement.

Nous le résolvons en ayant un dossier/static/qui possède son propre fichier web.config, remplaçant ainsi le fichier web.config d'origine.

Celui-ci contians seulement:

<system.webServer> 
    <handlers> 
     <clear/> 
     <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Either" requireAccess="Read" /> 
    </handlers> 
</system.webServer> 

Vous pouvez supprimer le module rounting d'ici aussi bien, car il pourrait être héritée. Nous n'avons cependant pas remarqué de problème, mais je n'y ai pas vraiment mis la tête non plus. Il se peut que nous ne fassions correspondre aucun itinéraire lorsque nous sommes à un niveau inférieur, ou que les sous-dossiers n'héritent pas des modules http.

Questions connexes