2009-03-09 3 views
0

すぐに新しいサイトを立ち上げます。サイトの1つのセクションには製品が含まれています。ASP.NET MVCの{controller}/{action}/{id} REST URLフォーマットから逸脱しているという落とし穴がありますか?

私は現在、ASP.NETルーティングのために異なるURL間で決定しようとしています:

**製品:**

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

**カテゴリー:**

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

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

私は主に次のうちどれを採用すべきかを決定しようとしています。 私は現在最初のことをしています。

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

または

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

または以下

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

の1私は本当に/products/1001のシンプルさのようなので、ユーザはそれを見て、それを変更することができます - しかし、危険はすぐそこにあります私が慎重でないならば、それは他の行動と矛盾します。ごくわずかな痛みであるURLSを作成する際には、必ず'product-route-short'を使用する必要があります。

誰もが何と思いますか?ベストプラクティスを見つけましたか?この例はかなりシンプルですが、サイト全体で一貫性を持たせたいと思っています。そして、Googleが既にすべてのものを索引付けしたら、すべてを改造する必要はありません。

特にポッドキャストや記事が(一般的またはASP.NET特有の)件名にある場合は、それらのリンクを参考にしてください。私は良いポッドキャストを見つけました。具体的には、「このポッドキャストは良いRESTリンクを作成する方法ではありません」ということでした。

答えて

1

SOそのものは、この質問をstackoverflow.com/questions/625213に掲載しています。無視される)。あなたは少なくとも前例を持っています:)。

+1

最終的なものの後にあるものはすべて/無視されます。これにより、URLをコピーして過去のものにすることが容易になり、それらの参照先を知ることができます。またあなたは質問のタイトルを変更することができ、既存のリンクは壊れない –

1

私が作っているURLが短いといいですね。 asp.net mvcルーティングエンジンの美しさは、あなたがビュー内でリンクを正しく作ったと仮定すると、開発中にルートを変更することができます。あなたが行くにつれて遊んでみてください。

覚えておくべきもう1つのことは、MapRouteメソッドのconstraints引数です。

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

このフィルタは、0〜9の間のスキューしか働かないようにします。明らかに、正規表現を使用して特定のシナリオに合わせたいと思うでしょうが、これはアクションとの競合を避けるのに役立ちます。この状況では、skuの値が0〜9の間でなかった場合、ルーティングエンジンは次のルートに移動して一致させようとします。これは、一致が見つかるまでこれを行います。

経路と制約を組み合わせることで、ユーザーにとって意味のあるきれいなURLを作成できるはずです。

4

私はこれらの目標に向かって私のURLをギアします...

1)使いやすさ。 URLを見ると、どのようなページが表示されるのかを知ることができれば本当にうれしいです。入力が不十分で推測が不十分な場合は、すべての方が優れています。

2)検索エンジン。あなたは本当にそれらのURLにあなたのキーワードを取得したい。 IDを使って商品を検索したいと思っていますが、人間や検索エンジンは商品名を見たいと思っています。また、URLの先頭にキーワードが近いほど重要性が高くなります。

これは実際にはスキミングです。最良のURLが必要な場合は、カテゴリ内のIDを使用するのではなく、カテゴリと商品名が一意であることを確認する必要があります。私の提案規則は次のようになり

...

/製品/

/製品/衣類/

/製品/衣類/ブルースエード靴/私は好きです

関連する問題