2009-09-09 6 views
5

Normalerweise schauen meine URLs wie der Standard: www.example.com/controller/actionWie Routing für meinen Admin-Abschnitt in ASP.NET MVC einrichten?

Nun ich Setup wie Abschnitt meiner Verwaltung wollen:

 
www.example.com/admin/ 
www.example.com/admin/user/list 
www.example.com/admin/content/add 
etc. 

So ist das Format: www.example.com/admin/controller/action

Ich kann nicht scheinen, um herauszufinden, wie man die Routen so einrichtet, dass es wie oben aussieht.

Antwort

11

Sie müssen nur einen neuen Pfad mit dem Abschnitt 'admin' abbilden, der am Anfang der Routendefinition fest codiert ist.

Zum Beispiel fügen Sie diese zu Ihren Routen in RegisterRoutes in der Global.asax.cs Datei und stellen Sie sicher, dass es über der Standardroute angezeigt wird (vorausgesetzt, Sie nicht andere Wege hinzugefügt haben):

routes.MapRoute(
    "Default",            
    "admin/{controller}/{action}/{id}",      
    new { controller = "Home", action = "Index", id = "" } 
); 

Hinweis: Um die ‚admin‘ Teil am Anfang der Routendefinition fest codiert.

Hinweis 2: Wenn Sie andere als die Standardrouten hinzugefügt haben, müssen Sie sicherstellen, dass Ihre Routen korrekt sortiert sind. Hier

ist ein Link zu einer guten Blog-Post von Scott Guthrie über MVC-Routing: URL Routing

+3

Durch die Verwendung von Dingen sind die anderen Controller durch Voranstellen von 'admin /' zu erreichen. Sie können Ihre Homepage besuchen/Home über Ihre Homepage/admin/Home auch. –

6

Kelsey Antwort ist direkt auf der Marke, aber ich wollte etwas zur Diskussion hinzuzufügen. Eine andere Option besteht darin, überhaupt keine "Admin" -Routen zu haben, sondern stattdessen Admin-authentifizierte Sitzungen, um tatsächlich auf die eingeschränkten URLs zuzugreifen.

Dies ist oft, wie Dinge in "traditionellen" RESTful-Anwendungen getan werden. Ihr Controller stellt den Typ der Ressource dar, die Sie bearbeiten, die Aktion ist das Verb und die ID ist der eindeutige Bezeichner für ein bestimmtes Mitglied dieser Ressource.

Mit anderen Worten, statt mit:

/content/list (for normal users) 
/admin/content/add (for admins) 

würden Sie haben

/content/list (for everyone) 
/content/add (for admin, but must be authenticated to work) 

Hinzufügen/admin/zur URL hinzufügen nicht wirklich keine benifits (außer vielleicht, dass Sie schreiben können Ihre Sicherheitslogik mit nur einer einzigen Regel gegen alles unter/admin), aber die Abwägung ist kompliziertere Routen und bricht den Standard RESTful. Das Brechen von Standardpraktiken ist an sich keine schlechte Sache, aber Sie sollten in Betracht ziehen, dass sie aus einem bestimmten Grund Standard sind, und wenn Sie keine spezifischen Vorteile dafür haben, diese zu brechen, könnten Sie in Erwägung ziehen, sich an sie zu halten.

Es sollte beachtet werden, dass in beiden URL-Stilen Sie den Benutzer authentifizieren müssen, sonst könnte jeder es verwenden.

In ASP.NET MVC können Sie den Zugriff auf Aktionen (oder sogar ganze Controller) basierend auf Benutzerebene mithilfe von ActionFilters einschränken. Indem Sie Ihre admin-on-Aktionen mit diesen Filtern dekorieren, können Sie sicherstellen, dass nur authentifizierte administrative Benutzer sie verwenden können.

Lesen Sie Scott Gu's Blog-Eintrag oder Rob Connery's post für weitere Informationen.

+0

Wie würden Sie mit einer Listenaktion für Benutzer umgehen (sie haben keinen Zugriff auf alles) und eine Listenaktion für Administratoren (wo sie alles sehen können)? Ich würde es vorziehen, keine Aktionsliste listAdmin oder etwas albernes zu haben. Oder gehe ich falsch herum. –

+0

@MrRogers - Es hängt wirklich davon ab, wie die beiden sich unterscheiden werden. Wenn der einzige Unterschied darin besteht, welche und wie viele Daten angezeigt werden, behalten Sie normalerweise dieselbe Ansicht bei, aber der Controller gibt an, welche Daten angezeigt werden sollen. Wenn sich die beiden Ansichten tatsächlich geringfügig unterscheiden (z. B. die Schaltflächen zum Bearbeiten/Löschen für Administratoren), können Sie in der Ansichtsvorlage mit einer bedingten Anweisung nach dem Administratorstatus suchen. Sie können den Administratorstatus in ViewData oder in der Sitzung festlegen. Eine letzte Option besteht darin, sie zu Teiltönen herauszuziehen. Also, Sie haben nur 1 Ansicht, list.aspx, aber dann admin vs regelmäßige Benutzer sind jeweils in Teilzahlen. – Matt

3

Ab MVC Version 2 haben sie das 'Bereich'-Konzept hinzugefügt, das Ihnen erlaubt, dies richtig zu machen :) Hier ist ScottGu's post about MVC 2 Preview.

+0

Bereiche sind eine nette Funktion in MVC2, aber in diesem speziellen Anwendungsfall brechen Sie immer noch die gleiche Ressource in verschiedene Controller. Also, anstatt alle Ihre "Content" Logik zusammen in einem einzigen Controller zu haben, haben Sie es aufgeteilt. In diesem Fall ist es viel wahrscheinlicher, dass Sie gegen die DRY-Regel verstoßen. Ganz zu schweigen von der semantischen Zwietracht. – Matt

+0

Nun, das kommt darauf an, was die Admin-Oberfläche macht. Wenn es sich um ein Backend zur Verwaltung des Systems handelt, ist dies eine ganz andere Sache als Ihr Inhalt. Wenn es nur Funktionalität hinzufügt, dann ja, ist Ihr Vorschlag, es nur durch Authentifizierung zu beschränken, wahrscheinlich besser. Aber ich bezweifle, dass das alles auf der Admin-Oberfläche ist. – Runeborg