RealPath:
WebPath:
2017/09/13 08:02 (JST) 更新
ルーティング >>

ルート設定一覧を確認

Contents

自分で記述したつもりのルート設定が正しく ASP.NET Core プロジェクトで認識できているかを確認するために、認識済みルート一覧情報を出力させたい。

ルート一覧を取得する、これといった「バッチリ」な方法はあんまり見つからなくて、以下のように IActionDescriptorCollectionProvider を使うのがなんとか目的に近い形っぽい。

IActionDescriptorCollectionProvider サンプル

c# - Get all registered routes in ASP.NET Core - Stack Overflow

抜粋&整理したコード
class RouteModel
{
    public string Name { get; set; }
    public string Template { get; set; }
}

// ※ IActionDescriptorCollectionProvider のインスタンスは DI により取得すること。
IActionDescriptorCollectionProvider actionDescriptorCollectionProvider;

// 属性ルート一覧の取得
var routes = actionDescriptorCollectionProvider.ActionDescriptors.Items
    .Where(ad => ad.AttributeRouteInfo != null)
    .Select(ad => new RouteModel
    {
        Name = ad.AttributeRouteInfo.Name,
        Template = ad.AttributeRouteInfo.Template
    })
    .ToList();

NuGet パッケージ「AspNetCore.RouteAnalyzer」の利用

手前味噌になるが、筆者が作成した NuGet パッケージ「AspNetCore.RouteAnalyzer」を使うともう少しマトモな情報が得られる。

使い方

1) AspNetCore.RouteAnalyzer をインストール

Package Manager Console
PM> Install-Package AspNetCore.RouteAnalyzer

2) Startup.cs に以下コードを挿入

Startup.cs
....
using AspNetCore.RouteAnalyzer; // ★ここを追加

....

public class Startup
{
    ....
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddRouteAnalyzer(); // ★ここを追加
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ....
        app.UseMvc(routes =>
        {
            routes.MapRouteAnalyzer("/routes"); // ★ここを追加
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}/{id?}");
        });
    }
    ....
}

3) プロジェクトを実行し、/routes の URL を開く

img--800--size

こんな感じにルート一覧が覗けるようになる。