您应该可以通过以下方式在您的控制器中获取它:
var url = ((System.Web.Routing.Route)this.ControllerContext.RouteData.Route).Url;
立即窗口
?网址;
“{controller}/{action}/{id}”
然后,如果您将其放入 ViewBag 或您的模型等中,您可以在您的视图中拾取它。
编辑:
如果您想访问所有路线,那么它就是:
var routeUrls = new List<string>();
foreach (var r in RouteTable.Routes)
{
routeUrls.Add(((Route)r).Url);
}
如果您想按 RouteName 进行过滤,那么根据 Phil Haacks 关于此 Getting the route name for a route 的帖子,您“不能”。
无法获取路由的路由名称,因为名称
不是路由的属性。将路线添加到
RouteCollection,名称用作内部唯一索引
路线,以便查找路线非常快。这个指数是
从未暴露。
Phil Haack,作为 Phil Haack,随后继续展示了如何做到这一点,但需要注意的是,如果您将相同的路由添加到多个集合,这将失败。
您创建了一些扩展方法,以便您轻松地将路由名称添加到路由数据令牌属性:
public static Route Map(this RouteCollection routes, string name,
string url) {
return routes.Map(name, url, null, null, null);
}
public static Route Map(this RouteCollection routes, string name,
string url, object defaults) {
return routes.Map(name, url, defaults, null, null);
}
public static Route Map(this RouteCollection routes, string name,
string url, object defaults, object constraints) {
return routes.Map(name, url, defaults, constraints, null);
}
public static Route Map(this RouteCollection routes, string name,
string url, object defaults, object constraints, string[] namespaces) {
return routes.MapRoute(name, url, defaults, constraints, namespaces)
.SetRouteName(name);
}
public static string GetRouteName(this Route route) {
if (route == null) {
return null;
}
return route.DataTokens.GetRouteName();
}
public static string GetRouteName(this RouteData routeData) {
if (routeData == null) {
return null;
}
return routeData.DataTokens.GetRouteName();
}
public static string GetRouteName(this RouteValueDictionary routeValues) {
if (routeValues == null) {
return null;
}
object routeName = null;
routeValues.TryGetValue("__RouteName", out routeName);
return routeName as string;
}
public static Route SetRouteName(this Route route, string routeName) {
if (route == null) {
throw new ArgumentNullException("route");
}
if (route.DataTokens == null) {
route.DataTokens = new RouteValueDictionary();
}
route.DataTokens["__RouteName"] = routeName;
return route;
}
然后您只需从 Route 中提取路由名称:
var route = routes.Map("rName", "url");
route.GetRouteName();
然后你可以这样做:
Route ajaxRoute = routes.FirstOrDefault(r => ((Route) r).GetRouteName() == "myName"));