2009-04-27 3 views
13

Ich benutze IIS 6. Ich denke, mein Problem ist, dass ich nicht weiß, wie man zu einem Nicht-Controller mit dem routes.MapRoute route.ASP.NET MVC Routing zu starten auf HTML-Seite

Ich habe eine URL wie beispiel.com und ich möchte, dass es die Seite index.htm und nicht die MVC dienen. Wie stelle ich das auf? In IIS habe ich index.htm als mein Startdokument und mein global.asax hat das Standard "Default" -Routing, wo es den Home/Index aufruft.

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 
     ); 

    } 

Ich habe diese:

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

es funktioniert. Aber ist das die beste Lösung?

+0

Ich denke, es ist interessant, dass Sie darauf hinweisen, dass Sie IIS6 ausführen. Ich kann nicht helfen, aber denke, dass das ein Schlüsselfaktor in der Lösung sein wird –

Antwort

-1

routes.IgnoreRoute?

Auch hierzu finden Sie diese Frage: How to ignore route in asp.net forms url routing

+0

Ich fügte hinzu: routes.Add (neue Route ("{Ressource} .htm/{* pathInfo}", neuer StopRoutingHandler())) ; Es hat nicht funktioniert. hinzugefügt: routes.IgnoreRoute ("{resource} .htm/{* pathInfo}"); hat nicht funktioniert – Marsharks

+0

In welcher Reihenfolge haben Sie es hinzugefügt? Ich denke, es ist wichtig, dass die StopRoutingHandler-Route die erste in der Liste ist. –

+0

Ich habe es vor den Routen hinzugefügt. Jetzt hinzufügen Ich habe ein Problem mit den ASP-Seiten nicht geladen! – Marsharks

18

ich einen Dummy-Controller hinzugefügt als Standard-Controller zu verwenden, wenn die Wurzel der Website angegeben ist. Dieser Controller verfügt über eine einzelne Indexaktion, die eine Umleitung an die Site index.htm im Stammverzeichnis vornimmt.

Beachten Sie, dass ich dies die Dokumentation eines MVC-basierten REST-Webdienstes verwende. Wenn Sie zum Stamm der Site gehen, erhalten Sie die Dokumentation des Service anstelle einer Standard-Web-Service-Methode.

+1

Erste akzeptable Antwort, die ich nach einigen Bounces um SO gesehen habe. Vielen Dank! –

+2

Dies würde eine zusätzliche Anforderung zum Abrufen der index.html –

+0

Gute Antwort, und einfach zu implementieren. – Del

-1

IIS6 weist einige Unterschiede zu IIS7 auf, wie ASP.NET damit arbeitet. Sehen Sie sich dieses blog post von Phli Haack an, um zu erfahren, wie dieses Setup für die Verwendung mit ASP.NET MVC eingerichtet wird. Viel Glück!

6

die asp.net-Routing konfigurieren root ("/") requests zu ignorieren und nach IIS's "Default Document" ISAPI-Filter dienen der statischen index.htm Datei

hinzufügen die auf die RegisterRoutes Methode lassen.

routes.IgnoreRoute(""); 
1

Die beste Lösung ist, den Standard-Controller zu entfernen. Dieses Problem tritt auf, weil Sie sowohl die Standardseite als auch die Standardroute ohne Parameter angeben.

Durch einfaches Entfernen der controller = "Home" auf den Routenstandardwerten stimmt die / nicht mehr mit der Route überein, und da keine andere Route erfüllt wird, untersucht IIS die Standarddokumente.

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 
    ); 
}