【问题标题】:How can I iterate through all defined MVC routes?如何遍历所有定义的 MVC 路由?
【发布时间】:2017-06-18 18:12:05
【问题描述】:

我正在尝试获取我网站的所有路由的列表,以检查是否使用了 URL,例如,我允许 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 to cast 异常...有什么建议吗?

更新 2:

当我添加这个过滤器时它可以工作

RouteTable.Routes.OfType()

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

【问题讨论】:

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


【解决方案1】:

当我添加这个 RouteTable.Routes.OfType() 时它工作

@foreach (var route in RouteTable.Routes.OfType<Route>())
{
    var r = (Route)route;
    <div>@r.Url</div>
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多