ASP.NET MVC で URL からコントローラー名を隠す

属性ルーティングで済むのではないかと思い、試してみました。結果、うまくいきました。

RegisterRoutes 内で、MapMvcAttributeRoutes を呼び出します。デフォルトで定義されている MapRoute は、必要がなければ削除(コメントアウト)します。

public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//属性ルーティングの有効化
routes.MapMvcAttributeRoutes();
//"Home" や "Home/Index" にアクセスする必要がなければ削除
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id}",
// defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
//);
}
}

続いて、ルート属性を利用して、指定します。ルートの ”/”、”/Articles”、”/Articles/Index” で Index アクションにアクセスできるように属性を 3 つ設定しています。

public class ArticlesController : Controller
{
[Route("~/")]
[Route("Articles")]
[Route("Articles/Index")]
public ActionResult Index()
{
return View();
}
}

💬 コメント