しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET 4.5 からルーティングで生成される URL を小文字に出来るというお話

ASP.NET MVC でデフォルトのテンプレートと同じように作ると、その URL は以下のように大文字が含まれるものが生成されてしまいますよね。

f:id:shiba-yan:20131030225319p:plain

しかし、SEO 的には URL は小文字で統一して欲しいです。

今までは Url.Action や Html.ActionLink などで小文字を指定するか、ルーティング周りを入れ替えるぐらいしか方法がなかったのですが、ASP.NET 4.5 からは RouteCollection に LowercaseUrls というプロパティが追加されていたようです。

RouteCollection.LowercaseUrls プロパティ (System.Web.Routing)

これを true にすると、URL ルーティングで生成される URL が全て小文字になるので解決!

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

        // URL は小文字にする
        routes.LowercaseUrls = true;

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

実際に試してみると、ちゃんとリンク先 URL が小文字になっていました!これは最高!!

f:id:shiba-yan:20131030225642p:plain

これでもう何も怖くない!と思ったのですが、ASP.NET MVC 4 ではエリアを使った時にはバグで設定が有効にならないようです。

ASP.NET MVC / Web API / Web Pages - View Issue #685: MVC areas do not support RouteCollection.LowercaseUrls

既に CodePlex で Issue として上げられており、更に ASP.NET MVC 5 で修正済みとなっているので、エリアと LowercaseUrls を組み合わせて使う場合には 5 にアップデートしましょうという話でした。

ASP.NET MVC 5 へのアップデートをちょいちょい進めてますが、今のところは .NET 4.5 向けでも AntiXSRF に気を付ければ問題なさそうですよ。