2009-04-27 19 views
13

Sto usando IIS 6. Penso che il mio problema è che non so come instradare a un non controllo utilizzando il routes.MapRoute.ASP.NET MVC routing per iniziare a pagina HTML

Ho un URL, ad esempio example.com e voglio di servire alla pagina index.htm e non utilizzare il MVC. come lo sistemo? In IIS, ho index.htm come documento iniziale e my global.asax ha il routing standard "predefinito", dove chiama Home/Index.

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

    } 

ho aggiunto questo:

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     if (Context.Request.FilePath == "/") Context.RewritePath("index.htm"); 
    } 

funziona. Ma questa è la soluzione migliore?

+0

Penso che sia interessante notare che si esegue IIS6. Non posso fare a meno di pensare che questo sarà un fattore chiave nella soluzione –

risposta

-1

routes.IgnoreRoute?

Inoltre, si veda questa domanda: How to ignore route in asp.net forms url routing

+0

Ho aggiunto questo: route .Aggiungi (nuova route ("{resource} .htm/{* pathInfo}", new StopRoutingHandler())) ; Non ha funzionato. aggiunto questo: routes.IgnoreRoute ("{resource} .htm/* {} pathinfo"); non ha funzionato – Marsharks

+0

in quale ordine l'hai aggiunto? Penso che sia importante che il percorso StopRoutingHandler sia il primo della lista. –

+0

L'ho aggiunto prima delle rotte. Aggiungi ora Ho un problema con le pagine asp che non si caricano! – Marsharks

18

ho aggiunto un controller manichino da utilizzare come controller di default quando viene specificata la radice del sito web. Questo controller ha un'azione di indice singolo che esegue il reindirizzamento al sito index.htm nella directory principale.

public class DocumentationController : Controller 
{ 
    public ActionResult Index() 
    { 
     return Redirect(Url.Content("~/index.htm")); 
    } 

} 

Si noti che sto usando questo la documentazione di un servizio Web REST basato su MVC. Se vai alla radice del sito, ottieni la documentazione del servizio invece di un metodo di servizio web predefinito.

+1

Prima risposta accettabile che ho visto dopo diversi rimbalzi intorno a SO. Grazie! –

+2

Ciò causerebbe un'ulteriore richiesta di recupero dell'indice.html –

+0

Buona risposta e semplice implementazione. – Del

-1

IIS6 ha alcune differenze rispetto IIS7 nel modo in cui ASP.NET funziona con esso. Dai un'occhiata a questo blog post di Phli Haack su come ottenere questa configurazione da utilizzare con ASP.NET MVC. In bocca al lupo!

6

Configurare l'instradamento asp.net di ignorare root ("/") requests e lasciare IIS's "Default Document" filtro ISAPI servire il index.htm file statico

Aggiungere il seguente al metodo RegisterRoutes.

routes.IgnoreRoute(""); 
1

La soluzione migliore è rimuovere il controller predefinito. Stai riscontrando questo problema, perché stai specificando sia la pagina predefinita che la route predefinita senza parametri.

Rimuovendo lo controller = "Home" sulle impostazioni predefinite del percorso, lo / non corrisponderà più al percorso e poiché nessun altro percorso sarà soddisfatto, IIS esaminerà i documenti predefiniti.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { action = "Index", id = "" }      // Parameter defaults 
    ); 
} 
Problemi correlati