シナリオ:
「本」と「書評」という2つのエンティティがあります。複数の本が存在する可能性があり、各本は複数のレビューを持つことができます。
各レビューと本には、個別のパーマリンクが必要です。書籍とレビューは、ユーザーが個別の入力フォームを使用して追加できます。書評が追加されるとすぐに、パーマリンクからアクセスできるようになります。
誰でもこれをどのように実装すべきかについて正しい方向に私を向けることができますか?
シナリオ:
「本」と「書評」という2つのエンティティがあります。複数の本が存在する可能性があり、各本は複数のレビューを持つことができます。
各レビューと本には、個別のパーマリンクが必要です。書籍とレビューは、ユーザーが個別の入力フォームを使用して追加できます。書評が追加されるとすぐに、パーマリンクからアクセスできるようになります。
誰でもこれをどのように実装すべきかについて正しい方向に私を向けることができますか?
URL ルーティングは、追加の実際の作業を必要とせずに、すぐにこれを処理します。
Books または BookReviews コントローラを作成するだけです。Id を受け取るアクション メソッドを作成する
/Books/Details/1 や /BookReviews/Details/4 などの基本的なパーマリンクがあります。
そのようなパーマリンクに満足しているなら、あなたは行ってもいいです. :)
ただし、もう少し作業を進めて、さらに検索エンジンに適したものにしたい場合は......
最初に、単純な「スラッグ」エンコーダーを作成または検索する必要があります。このエンコーダーは、文字列 (おそらく書籍またはレビュアーのタイトル) を取得し、英数字以外の文字を - などにエンコードします。C#のURL Slugifyアルゴリズム?
これで、次のようなルートを作成できます
書籍/{タイトル}-{id}
routes.MapRoute(
"BooksSeoRoute",
"Books/{slug}-{id}",
new { controller = "Books", action = "Details" } // Parameter defaults
);
したがって、次のようなパーマリンクが作成されます: Books/The-Title-Of-The-Book-38
書評については、「ネストされた」アプローチが必要になる場合があります。
routes.MapRoute(
"BookReviewsSeoRoute",
"Books/{book-slug}/{slug}-{id}",
new { controller = "BookReviews", action = "Details" } // Parameter defaults
);
本/The-The-Of-The-Book-38/Review-by-John-Smith-24
モデル/エンティティ/データベースにスラッグ フィールドを追加するか、タイトル/作成者から動的に生成するゲッターを追加することができます。
すなわち
public class Book {
public string Id {get;set;}
public string Title {get;set;}
public string Slug
get
{
return SlugEncoder.EncodeString(this.Title);
}
}
あなたの見解では
=Html.ActionLink("Permalink","Details","Book",new{@Id=Model.Id, @Slug=Model.Slug})