Impostare la pagina di default con MonoRail Routing HttpModule

datevenerdì 30 ottobre 2009 alle 21.30  - posted by Manuel Scapolan in Castle Project

Oggi ho avuto l'occasione di utilizzare il Routing di MonoRail per risolvere un problema da tempo in sospeso, ovvero chiamare l'action di default quando nell'indirizzo viene specificato solo il nome del controller. Ad esempio se digitiamo mysite.com/admin MonoRail deve essere in grado di richiamare mysite.com/admin/default.rails.
La prima cosa da fare è creare nella root del sito la cartella admin con all'interno una pagina Default.aspx senza code-behind. In questo modo ASP.NET riscriverà la chiamata a mysite.com/admin con l'indirizzo mysite.com/admin/Default.aspx. In secondo luogo dobbiamo registrare nel web.config l'HttpModule di Routing:

<httpModules>
 <!-- il modulo di routing deve precedere quello di monorail -->
 <add name="routing" type="Castle.MonoRail.Framework.RoutingModule,
    Castle.MonoRail.Framework" />
 <add name="monorail" type="Castle...EngineContextModule,
    Castle.MonoRail.Framework"/>
</httpModules>

A questo punto possiamo dichiarare delle regole di routing specificando con le regular expression quali indirizzi considerare e come eseguirne la riscrittura:

<monorail useWindsorIntegration="true">
   <viewEngine viewPathRoot="Views" 
      customEngine="Castle.MonoRail...NVelocity.NVelocityViewEngine, 
      Castle.MonoRail.Framework.Views.NVelocity"/>
   <routing>
      <rule>
         <pattern>(\b/\w+)/?Default.aspx$</pattern>
         <replace><![CDATA[ $1/default.rails ]]></replace>
      </rule>
      <rule>
         <pattern>(/Default.aspx)</pattern>
         <replace><![CDATA[ /home/default.rails ]]></replace>
      </rule>
   </routing>
</monorail>

Nell'esempio sono state registrare due regole, nella prima vengono considerati tutti gli indirizzi che iniziano con il carattere / seguito da almeno un carattere alfanumerico e che terminano con un carattere / e la stringa Default.aspx, questi indirizzi vengono riscritti prendendo la parte prima del Default.aspx aggiungendovi /default.rails. La seconda regola invece ci permette di intercettare le chiamate alla pagina Default.aspx che si trova nella root del sito e che con la logica della prima regola porterebbe ad un controller vuoto e di conseguenza ad una bella eccezione. In questo caso l'indirizzo viene sostituito con /home/default.rails.

Nota: Per utilizzare questa tecnica è necessario creare una Default.aspx con relativa cartella per ogni controller dell'applicazione o meglio per i controller che necessitano di una pagina di default.

Commenti chiusi

About me

manuel scapolanSono un consulente informatico. Nel 2004 terminati gli studi in Ingegneria Informatica (1° livello), ho iniziato come freelance collaborando con una ditta di consulenza informatica ed una agenzia di marketing e comunicazione nello sviluppo di applicazioni web. Attualmente divido il lavoro di sviluppatore e progettista web con attività di formazione nel settore della programmazione.
View Manuel Scapolan's profile on LinkedIn

Follow me on Follow manuelscapolan on Twitter

Calendario


<<  settembre 2010  >>
lumamegivesado
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

Disclaimer

Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati mediante:
creative commons
Attribuzione: Non commerciale
Condividi allo stesso modo. R.2.5

Books (a bit more about my library)

Domain Driven Design - Eric Evans Applying Domain-Driven Design and Patterns - Jimmy Nilsson Refactoring to Patterns - Joshua Kerievsky Design Patterns -  Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides Code Complete Second Edition - Steve McConnell Patterns of Enterprise Application Architecture - Martin Fowler Agile Principles, Patterns, and Practices in C# - Robert C. Martin xUnit Test Patterns - Gerard Meszaros Refactoring - Martin Fowler CLR via C# Second Edition - Jeffrey Richter Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries - Krzysztof Cwalina, Brad Abrams Don't make me think! - Steve Krug Bulletproof Ajax - Jeremy Keith

Manuel Scapolan Copyright © 2007 - 2010 - Tutti i diritti riservati - Powered by BlogEngine.NET 1.5.0.7 - silk icons by famfamfam - Time CET