今天寫 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 囉!
全站熱搜
留言列表