今天寫 ASP.NET MVC 時,想抓目前的 RouteName 出來看,但 RouteCollection 好像在跟我唱反調一般,就是不讓我看到目前的 RouteName。

    心一橫,乾脆進 Source Code 去找看看,果然找到可以直接抓出來的辦法。原來 RouteCollection 是用一個 Dictionary 在儲存這些 RouteTable 的資訊。知道這點之後,要抓出來就不是什麼難事了。

public static string getRouteName() { 
    RouteData currentRoute = RouteTable.Routes.GetRouteData(
            new HttpContextWrapper(System.Web.HttpContext.Current));
 
 
    if (currentRoute == null) return null;
 
 
    FieldInfo field = typeof(RouteCollection).GetField(
        "_namedMap", 
        BindingFlags.Instance | BindingFlags.NonPublic); 
 
 
    Dictionary<string, RouteBase> namedMap =
        field.GetValue(RouteTable.Routes)
        as Dictionary<string, RouteBase>;
 
 
    return namedMap.First(
        route => { return route.Value == currentRoute.Route; }
    ).Key; 
}

 

    這樣一來,只要呼叫這個方法就可以知道目前所走的 RouteName 囉!

arrow
arrow
    全站熱搜

    AnferneeHardaway 發表在 痞客邦 留言(0) 人氣()