2009-06-22 1 views
8

Si consideri il seguente percorso:Perché ASP.NET MVC ignora la mia barra finale?

routes.MapRoute(
     "Service", // Route name 
     "service/", // URL with parameters 
     new {controller = "CustomerService", action = "Index"} // Parameter defaults 
     ); 

Utilizzando Url.Action("Service", "CustomerService") produce un URL di /service invece dei previsti /service/

Esiste un modo per ottenere questo lavoro, o devo ricorrere ad attuare il mio instradamento derivante da RouteBase?

+3

Posso chiedere perché questo è importante? Per quanto riguarda i browser, a loro non importa. E per quanto riguarda la costruzione dei propri URL di rotta basati su questa rotta, il trailing/sarà aggiunto automaticamente quando necessario. –

+0

Voglio solo mantenere i miei url coerenti con una versione precedente del sito che usava gli URL con una barra finale. So che in teoria non importa, ma per eredità lo fa. :) – andreialecu

+1

Tuttavia, non c'è davvero alcun motivo per preoccuparsi, anche per l'eredità. Se la barra finale è tutto ciò che differisce, non c'è alcuna differenza. Tutti i vecchi URL saranno validi e tutti i nuovi URL funzioneranno con le vecchie posizioni. –

risposta

4

Legenden: non esiste una soluzione immediata al problema. Potrebbe essersi imbattuto in Jason Young's blog post in merito al problema, che è molto istruttivo. Scott Hanselmann posted a reply qui, in pratica affermando che non pensava che fosse un grosso problema, e se lo è, puoi sfruttare il nuovo modulo di riscrittura IIS7 per risolverlo.

In ultima analisi, però, si potrebbe desiderare di guardare ad una soluzione che è stato pubblicato da Murad su una questione analoga su StackOverflow: Trailing slash on an ASP.NET MVC route

-5

Nel vostro evento di caricamento della pagina aggiungere:

Dim rawUrl As String = HttpContext.Current.ApplicationInstance.Request.RawUrl 
If Not rawUrl.EndsWith("/") Then 
    HttpContext.Current.ApplicationInstance.Response.RedirectPermanent(String.Format("~{0}/", rawUrl)) 
End If 
+5

Non è questa la domanda, inoltre, non c'è nessun evento di caricamento della pagina in mvc. – andreialecu