53

ASP.NET MVC ルートには、マップ時に名前があります。

routes.MapRoute(
    "Debug", // Route name -- how can I use this later????
    "debug/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = string.Empty } );

上記の例の「Debug」など、ルート名を取得する方法はありますか? コントローラーの OnActionExecuting でアクセスして、デバッグ時に ViewData に何かを設定できるようにしたいと思います。たとえば、URL の前に /debug/... を付けます。

4

6 に答える 6

75

残念ながら、ルート名はルートに保存されません。これは、MVCの内部でコレクションのキーとして使用されるだけです。これは、たとえばHtmlHelper.RouteLinkを使用してリンクを作成するときにも使用できるものだと思います(おそらく他の場所でも、わかりません)。

とにかく、私もそれが必要でした、そしてここに私がしたことがあります:

public static class RouteCollectionExtensions
{
    public static Route MapRouteWithName(this RouteCollection routes,
    string name, string url, object defaults, object constraints)
    {
        Route route = routes.MapRoute(name, url, defaults, constraints);
        route.DataTokens = new RouteValueDictionary();
        route.DataTokens.Add("RouteName", name);

        return route;
    }
}

したがって、次のようなルートを登録できます。

routes.MapRouteWithName(
    "myRouteName",
    "{controller}/{action}/{username}",
    new { controller = "Home", action = "List" }
    );

コントローラアクションでは、次のコマンドでルート名にアクセスできます。

RouteData.DataTokens["RouteName"]

お役に立てば幸いです。

于 2008-12-12T19:22:11.547 に答える
0

これは質問に直接答えるものではありません(衒学的になりたい場合)。ただし、実際の目的は、ルート名を指定してルートのベース URL を取得することのようです。だから、これは私がそれをした方法です:

私のルートは次のように定義されRouteConfig.csていました:

routes.MapRoute(
            name: "MyRoute",
            url: "Cont/Act/{blabla}",
            defaults: new { controller = "Cont", action = "Act"}
        );

ルートのベース URL を取得するには:

var myRoute = Url.RouteUrl("MyRoute", new { blabla = "blabla" }).Replace("blabla", "");

それは私が欲しかったルートのベース URL を与えてくれました:

/Cont/Act/

お役に立てれば。

于 2016-07-28T11:37:13.403 に答える
-1

代替ソリューションは、ソリューション構成を使用することです。

protected override OnActionExecuting()
{
    #if DEBUG

        // set up stuff in the ViewData

    #endif

    // continue
}

このようにルート名を参照する必要は実際にはありません。これが、MVC がこの種のことを行うのを非常に困難にしている理由だと思います。

于 2012-11-20T21:40:12.530 に答える
-2

別のオプション - string[] 名前空間引数で MapRoute を使用すると、名前空間を次のように表示できますRouteData.DataTokens["Namespaces"]

于 2011-05-31T14:35:54.133 に答える