我发誓这没有意义。
鉴于我HttpRouteCollection
从 Web API 获得了这个,我正在根据一些自定义路由类型进行过滤,特别是IAttributeRoute
. 我使用httpRoutes.OfType<IAttributeRoute>()
但循环的行为就像没有元素一样。
需要明确的是,当这个循环被命中时,整个集合都是HttpAttributeRoute
直接实现的类型IAttributeRoute
。此外,我在常规的RouteCollection
.
这不起作用:
foreach (IAttributeRoute route in GlobalConfiguration.Configuration.Routes.OfType<IAttributeRoute>()) {
if (!string.IsNullOrWhiteSpace(route.RouteName) && !json.ContainsKey(route.RouteName)) {
json.Add(route.RouteName, "/" + route.Url);
}
}
然而,这很好用:
foreach (var route in GlobalConfiguration.Configuration.Routes)
{
if (route is IAttributeRoute) // uhhhh?
{
var r = route as IAttributeRoute;
if (!string.IsNullOrWhiteSpace(r.RouteName) && !json.ContainsKey(r.RouteName))
{
json.Add(r.RouteName, "/" + r.Url);
}
}
}
我发誓我没有撒谎,它只适用于后面的代码。就像我说的,在正常的路由集合上这样做是可以的。正常的路由集合有其他类型,不仅仅是IAttributeRoute
,但 HttpRouteCollection在其当前状态下只有, (将来它可能有不同类型的路由)。IAttributeRoute
这可能是一个因素吗?
我是否遗漏了什么或没有OfType
做我在内部做的事情?