ルーティングの設定でURLとコントローラーを紐付ける
ASP.NET CoreのMVCでルーティングを設定する方法です。プロジェクトの作成時に自動で生成されるものとは別で定義したいものがあったので、ルーティングについてちょっと調べたことのメモになります。
コード
MVCプロジェクトを作成すると「Startup.cs」に以下のルーティングが設定されています。
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
上記のroutes.MapRoute~の設定では、コントローラー名とアクションメソッド名、それにパラメータの情報が設定されていて、「Home/Index/123」や「Product/Detail/456」などのURLに対応しています。
今回は、別のURLでも同じコントローラーにアクセスさせたかったので、routes.MapRouteを以下のように修正します。
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
// 検索
routes.MapRoute(
name:"Search",
template: "search",
defaults: new { controller = "Product", action = "Search" });
// 商品詳細
routes.MapRoute(
name: "Product",
template: "product/{id?}",
defaults: new { controller = "Product", action = "Detail" });
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
上記の場合、URL「search」でProductコントローラーのSearchメソッド、「product/456」でProductコントローラーのDetailメソッドを呼び出すことが可能になります。
「name:"default"」の設定も残しているので、コントローラーとメソッドの組み合わせ(product/detail/456など)でもアクセスが可能です。