1

次の形式のURLを許可することにより、SEO(および人間)に優しいURLを許可するようにルーティングを設定しました~/{category}/{title}

これらはすべて、適切にリダイレクトするメソッドを持つコンテンツコントローラーにルーティングする必要があります。また~/{category}、フィルタリングされたインデックスに移動できるようにします。

これはすべて、以下を使用して機能します。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Category And Title", // Route name
        "{category}/{title}", // URL with parameters
        new { controller = "Content", action = "SeoRouting", title = UrlParameter.Optional }, // Parameter defaults
        new { category = "People|IT|Personnel|Finance|Procedures|Tools"}
        ); 

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
        );

}

ただし、カテゴリが変更された場合は、2か所で変更する必要があります。ここGlobal.asaxと列挙型にはカテゴリがあります。

理想的な世界では、パスの最初の部分の値がContentCategory列挙型と一致する場合は最初のルートを使用し、一致しない場合はデフォルトルートを使用します。

カテゴリはめったに変更されないので、これは大きなことではありませんが、可能であると思われる場合は可能です。

4

1 に答える 1

12

申し訳ありませんが、実際の質問が何であるかについて少し混乱していますが、実際の列挙型を使用して正規表現オブジェクトを生成することで、「2か所でコードを変更する」(一種)を回避できます。

routes.MapRoute(
    "Category And Title", // Route name
    "{category}/{title}", // URL with parameters
    new { controller = "Content", action = "SeoRouting", title = UrlParameter.Optional }, // Parameter defaults
    new { category = getCategories() }
    ); 

private static string getCategories()
{
     var categories = Enum.GetNames(typeof(ContentCategory));
     return string.Join("|", categories);
}
于 2012-11-19T12:49:58.493 に答える