2009-03-09 6 views
0

Ich werde bald eine neue Website starten. Ein Abschnitt der Website enthält Produkte.Fallstricke, die vom Format der {controller}/{aktion}/{id} -REST-URL für ASP.NET MVC abweichen?

ich derzeit zwischen verschiedenen URLs für die ASP.NET-Routing zu entscheiden, ich versuche:

** Produkte: **

/products/1001 
/products/sku/1001 
/products/product/1001 
/products/view/1001 

** Kategorien: **

/products/category/cats 
/products/category/clothing 

/products/cats   - this is pretty nasty 
/products/clothing 

Ich versuche in erster Linie zu entscheiden, welches der folgenden Dinge ich übernehmen sollte. Ich mache gerade das erste.

routes.MapRoute(
    "product-route-short", 
    "products/{sku}", 
    new { controller = "Products", action = "ViewProduct", sku = "1001"} 
); 

oder

routes.MapRoute(
    "product-route-short", 
    "products/sku/{sku}", 
    new { controller = "Products", action = "ViewProduct", sku = "1001"} 
); 

oder eine der folgenden

* call the action 'sku' , 'details' , 'item' 
* use an [ActionName] attribute and leave the action method name as 'ViewProduct' 

Ich mag die Einfachheit der /products/1001 so kann der Benutzer sie sehen und verändern - aber es ist schnell eine Gefahr davon im Widerspruch zu anderen Aktionen, wenn ich nicht vorsichtig bin. Ich muss auch sicher sein, 'product-route-short' zu verwenden, wenn ich meine URLs erstelle, die ein sehr kleiner Schmerz sind.

Was denkt jemand? Wofür haben Sie eine Best Practice gefunden? Dieses Beispiel ist ziemlich einfach, aber ich möchte natürlich überall auf der Website konsistent sein und möchte nicht alles nachrüsten, wenn Google bereits alles für mich indiziert hat.

Wenn es besonders gute Podcasts oder Artikel zum Thema gibt (allgemein oder spezifisch für ASP.NET), würde ich mich über Links zu ihnen freuen. Ich fand einen guten Podcast, wo eine Sache, die sie speziell gesagt haben, war, dass "dieser Podcast NICHT dazu dient, gute REST-Links zu erstellen"

Antwort

1

Beachten Sie, dass SO selbst diese Frage auf stackoverflow.com/questions/625213 auflistet (the/here ist ignoriert). So hast du zumindest Präzedenzfälle :).

+1

Ich mag das tun Tatsache, dass alles, was nach dem final ist/ignoriert wird - was es einfach macht, URLs zu kopieren und vergangen zu sein und immer noch weiß, worauf sie sich beziehen. Sie können auch den Titel der Frage ändern und bestehende Links werden nicht unterbrochen –

1

Ich denke, die kürzeren URLs, die Sie machen, sind in Ordnung. Die Schönheit der asp.net mvc-Routing-Engine ist, dass, wenn Sie Ihre Links in den Ansichten korrekt gemacht haben, Sie Änderungen an den Routen vornehmen können, während Sie entwickeln. Also, spielen Sie ruhig herum.

Eine andere Sache zu beachten ist das Constraints-Argument in der MapRoute-Methode. Sie können immer etwas wie dieses versuchen:

routes.MapRoute( 
"product-route-short", 
"products/{sku}", 
new { controller = "Products", action = "ViewProduct", sku = "1001" } , 
new { sku = @"[0-9]" } 
); 

routes.MapRoute( 
"product-route-other", 
"products/{action}/id", 
new { controller = "Products", action = "ViewProduct" } 
); 

Dieser Filter wird es so machen, nur skus zwischen 0-9 wird funktionieren. Natürlich möchten Sie eine Regex für Ihr spezielles Szenario verwenden, aber das würde Ihnen helfen, Konflikte mit Aktionen zu vermeiden. Wenn in diesem Fall der Wert für sku nicht zwischen 0 und 9 liegt, würde die Routing-Engine zur nächsten Route gehen und versuchen, diese zu erreichen. Es wird dies tun, bis es eine Übereinstimmung findet.

Mit der Kombination von Routen und Einschränkungen sollten Sie in der Lage sein, eine sehr saubere URL zu haben, die für den Benutzer sinnvoll ist.

4

Ich würde Gang meine URLs auf diese Ziele ...

1) Usability. Es ist wirklich nett, wenn Sie feststellen können, welche Art von Seite Sie bekommen, wenn Sie sich die URL ansehen.Wenn es kurz genug ist, um zu tippen und/oder zu erraten, umso besser.

2) Suchmaschinen. Sie möchten Ihre Keywords wirklich in diese URLs aufnehmen. Ich weiß, dass Sie die ID verwenden möchten, um das Produkt nachzuschlagen, aber Menschen und Suchmaschinen möchten dort den Produktnamen sehen. Je näher ein Schlüsselwort an den Anfang der URL ist, desto wichtiger wird es auch.

Dies ist wirklich nur ein Skimming. Wenn Sie die besten URLs benötigen, müssen Sie sicherstellen, dass die Kategorien und Produktnamen eindeutig sind, sodass Sie sie nachschlagen können, anstatt IDs in der Adresse zu verwenden.

Meine vorgeschlagene Konvention wäre ...

/products/

/Produkte/Bekleidung/

/Produkte/Bekleidung/blau-Wildleder-Schuhe/