如何遍历所有已定义的MVC路由?

时间:2017-06-18 18:12:05

标签: asp.net asp.net-mvc asp.net-mvc-5.2

我试图获取我网站所有路线的列表,以便检查网址是否被占用,例如,我允许mydomain.com/username - 所以我想确保用户名可以使用,它不是像mydomain.com/contact

那样的使用路线

如何遍历所有已定义的MVC路由?

更新1:

由于某种原因,suggested answer中的代码对我来说是异常的(0x80004002) - 无法转换类型为&System; Web.Mvc.Routing.RouteCollectionRoute'输入' System.Web.Routing.Route'。

我有一些路由RouteTable.Routes.Count,下面这段代码让我看到我有不同类型的对象(不知道为什么)

@foreach (var r in RouteTable.Routes)
{
    // var r = (System.Web.Routing.Route)route; // This is breaking
    <div>@r.ToString()</div>
}

我得到的结论是:

  

Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.RequestDataRoute   System.Web.Http.WebHost.Routing.HttpWebRoute,   System.Web.Mvc.RouteCollectionExtensions + IgnoreRouteInternal,   System.Web.Mvc.Routing.RouteCollectionRoute,   System.Web.Mvc.Routing.LinkGenerationRoute,   System.Web.Routing.Route

看起来我需要的路线是在System.Web.Mvc.Routing.LinkGenerationRoute类型对象中

我不明白为什么我在RouteTable.Routes中获取不同类型的对象,但是,如果我尝试强制转换为Route并获取URL,我会得到Unable来抛出异常......有什么建议吗?

更新2:

添加此过滤器

时有效
  

RouteTable.Routes.OfType&LT;路线&gt;()

我很想知道为什么需要它以及RouteTable.Routes中的其他对象类型

1 个答案:

答案 0 :(得分:2)

当我添加此RouteTable.Routes.OfType()

时,它正在工作
@foreach (var route in RouteTable.Routes.OfType<Route>())
{
    var r = (Route)route;
    <div>@r.Url</div>
}