如何遍历所有已定义的 MVC 路由?
How can I iterate through all defined MVC routes?
我正在尝试获取我网站所有路由的列表,以检查 URL 是否被占用,例如,我允许 mydomain.com/username - 所以我想确保用户名可以使用,而不是像 mydomain 这样的使用过的路由。com/contact
如何遍历所有已定义的 MVC 路由?
更新 1:
出于某种原因, 中的代码因异常 (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 中得到不同类型的对象,但是,如果我尝试投射到路线并获得 URL 我得到无法投射异常...有什么建议吗?
更新 2:
当我添加这个过滤器时它起作用了
RouteTable.Routes.OfType< Route >()
我很想了解为什么需要它以及 RouteTable.Routes
中的其他对象类型是什么
它在我添加这个时起作用 RouteTable.Routes.OfType()
@foreach (var route in RouteTable.Routes.OfType<Route>())
{
var r = (Route)route;
<div>@r.Url</div>
}
我正在尝试获取我网站所有路由的列表,以检查 URL 是否被占用,例如,我允许 mydomain.com/username - 所以我想确保用户名可以使用,而不是像 mydomain 这样的使用过的路由。com/contact
如何遍历所有已定义的 MVC 路由?
更新 1:
出于某种原因,
我确实有一些路线 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 中得到不同类型的对象,但是,如果我尝试投射到路线并获得 URL 我得到无法投射异常...有什么建议吗?
更新 2:
当我添加这个过滤器时它起作用了
RouteTable.Routes.OfType< Route >()
我很想了解为什么需要它以及 RouteTable.Routes
中的其他对象类型是什么它在我添加这个时起作用 RouteTable.Routes.OfType()
@foreach (var route in RouteTable.Routes.OfType<Route>())
{
var r = (Route)route;
<div>@r.Url</div>
}