2008-08-27 9 views
10

Ich möchte mehrere Wildcard-Routen ignorieren. Mit asp.net MVC Vorschau 4, sie Schiff mit:Asp.Net Routing: Wie ignoriere ich mehrere Wildcard-Routen?

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

würde ich auch noch hinzufügen, so etwas wie:

RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}"); 

aber das scheint einige der Helfer zu brechen, die Urls generieren in meinem Programm. Gedanken?

Antwort

13

Hier gibt es zwei mögliche Lösungen.

  1. Fügen Sie der Ignore-Route eine Einschränkung hinzu, um sicherzustellen, dass nur Anforderungen, die ignoriert werden sollen, dieser Route entsprechen. Ein bisschen kludgy, aber es sollte funktionieren.

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"}); 
    
  2. Was befindet sich in Ihrem Inhaltsverzeichnis? Standardmäßig leitet Routing keine Dateien weiter, die auf dem Datenträger vorhanden sind (überprüft den VirtualPathProvider). Wenn Sie also statischen Inhalt in das Inhaltsverzeichnis einfügen, benötigen Sie möglicherweise die Ignore-Route nicht.

5

Dies kann ziemlich schwierig sein.

Wenn Sie herausfinden möchten, wie Sie Routendaten in eine Route abbilden, sucht das System derzeit von oben nach unten, bis es eine Stelle gefunden hat, an der alle erforderlichen Informationen bereitgestellt sind, und fügt dann alles andere in die Abfrageparameter ein.

Da die erforderlichen Informationen für die Route "Inhalt/{* pathInfo}" immer vollständig erfüllt ist (keine erforderlichen Daten in dieser Route), und es ist in der Nähe der Spitze der Routenliste, dann alle Ihre Versuche zu zuordnen unbenannte Routen entsprechen diesem Muster, und alle Ihre URLs basieren darauf ("Inhalt? action = foo & controller = bar")

Leider gibt es keinen Weg mit Aktionsrouten. Wenn Sie benannte Routen verwenden (z. B. Html.RouteLink anstelle von Html.ActionLink wählen), können Sie den Namen der Route angeben, die übereinstimmen soll. Es ist weniger praktisch, aber präziser.

IMO, komplexe Routen lassen das Action-Routing-System grundsätzlich umfallen. In Anwendungen, in denen ich etwas anderes als die Standardrouten habe, wende ich mich fast immer wieder der URL-Generierung auf der Basis von benannten Routen zu, um sicherzustellen, dass ich immer den richtigen Weg finde.