2009-09-11 4 views
7

Ich lerne immer noch ASP.NET MVC. Mit Webforms würde ich einen neuen Ordner erstellen, nennen wir es Admin. Dort könnte ich viele Seiten für create_product, edit_product usw. haben. So könnte die URL wie http://somesite.com/admin/create_product.aspx aussehen.ASP.NET MVC Wie viele Ebenen sollte eine Ansicht oder URL tief sein?

Aber mit MVC ist es ein bisschen anders. Ich versuche zu sehen, was der beste Weg wäre, dies zu tun.

Würde das tun http://somesite.com/admin/product/create richtig sein? Oder sollte es einfach http://somesite.com/product/create sein? Wenn ich es als ersten Weg tue, lege ich alles in den "admin" Controller oder sollte es in einen "product" Controller getrennt werden?

Ich weiß, das ist wahrscheinlich subjektive oder persönliche Wahl, aber ich würde gerne etwas beraten.

Danke.

Antwort

11

Ein Teil des Vorteils von ASP.NET MVC (und allgemeiner der URL-Routing-Engine für alle ASP.NET in .NET 3.5 SP1) besteht darin, dass die URLs flexibel konfiguriert werden können um eine beliebige Ordner-/Dateistruktur zuzuordnen. Das bedeutet, dass es viel einfacher ist als in den Tagen von WebForms, Ihre URLs zu ändern, nachdem Sie mit der Erstellung Ihres Projekts begonnen haben.

Um Ihre spezifischen Fragen:

  • Ein Admin-Controller gegen Produkt-Controller - Im Allgemeinen ist die Führung Controller fokussiert zu halten, damit sie leichter zu testen und zu warten sind. Aus diesem Grund würde ich vorschlagen, einen einzelnen Controller pro Objekttyp (wie Produkt) mit Ihren CRUD-Aktionen zu verwenden. Beispiele in Ihrem Fall:

    /admin/product/erstellen

    /admin/product/edit/34 oder/admin/product/edit/rot-Schuhe (wenn Name ist einzigartig)

    In beiden Fällen befinden sich die Aktionen Create, Edit, Deatils alle im ProductController. Möglicherweise haben Sie nur benutzerdefinierte Routen für die "Admin-Aktionen" (wie Erstellen und Bearbeiten), die ihre Verwendung einschränken (und den "admin" -Text der URL hinzufügen), und dann wäre die Aktion Details für alle Besucher Ihrer Website verwendbar.

  • Sicherung von Admin-Ansichten - Eine wichtige Tatsache, die man sich bei MVC merken sollte: Alle Anfragen gehen direkt an die Controller, nicht an Ansichten. Das bedeutet, dass das alte "secure a directory with web.config" (normalerweise) nicht auf MVC angewendet wird, um Ihren Admin zu sichern. Stattdessen sollten Sie nun Sicherheit direkt auf die Controller anwenden. Dies kann leicht durch die Verwendung Attribute Controller-Klassen wie erreicht werden:
    • [autorisieren] - prüft nur, dass der Benutzer angemeldet ist in
    • [autorisieren (Roles = "Admin")] - Limit für bestimmte Benutzerrollen
    • [autorisiert (User = "Joe")] - Limit für bestimmte Benutzer

Sie können sogar eine eigene Route für "Admin" Blick in Ihrer Website und den Zugang zu diesen Ansichten erstellen, indem die Durchsetzung Ihre Berechtigungsprüfung in der URL-Routing, wie folgt:

routes.MapRoute(
    "Admin", 
    "Admin/{controller}/{action}", 
    new { controller = "Product", action = "Index" }, 
    new { authenticated= new AuthenticatedConstraint()} 
); 

Wo AuthenticatedConstraint sieht ungefähr so ​​aus:

using System.Web; 
using System.Web.Routing; 
public class AuthenticatedConstraint : IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
    return httpContext.Request.IsAuthenticated; 
    } 
} 

Gute Details zu Stephen Walther Blog: ASP.NET MVC Tip #30 – Create Custom Route Constraints

1

Für Admin-Zeug, markieren Sie einfach mit [Authorize] Attribut. Um sicherzustellen, dass nur Administratoren es verwenden können, tun Sie etwas wie [Authorize(Roles = "Admin")]. Schauen Sie sich this question

Auch/Produkt/erstellen wird am häufigsten, ich denke :)

+0

Thansks, ich bin nicht auf den Punkt der Autorisierung von Benutzern. Ich möchte nur sehen, wie ich meine URLs erstellen soll. Oder einige gute Ratschläge dazu. :) – vincentw56

1

I3Dx auf jeden Fall die richtige Orientierung für das Autorisieren Attribut, das für die Aufbewahrung Controller sicher wesentlich ist, können Sie mit einem Controller anwenden oder einzelne Aktionen.

Was die URL Tiefe, würde ich nicht über die Tiefe Sorge, würde ich mehr Sorgen, dass die Route logischen Sinn zum Beispiel aus:

domain.com/admin/products/edit/1

domain.com/admin/groups/edit/1

domain.com/products/view/1

domain.com/groups/view/1

diese Weise können Sie w wissen Hut passiert mit jeder Route. Es ist offensichtlich, dass einer ein Administrator ist und einer ein Endbenutzer ist.

Der einfachste Weg zu überprüfen ist, jemanden dazu zu bringen, Ihre URL zu lesen und sie zu fragen, was sie erwarten würden.

Hoffe, das hilft.

OH und eine letzte Sache, für clientseitige Routen verwenden wir oft "Slugs" statt IDs, so dass es besser lesbar ist. Also, wenn jemand ein Produkt erzeugt slugify wir den Namen, so dass es in der Route wie verwendet werden können:

domain.com/products/view/big-red-bucket

statt

Domäne. com/products/view/1