私はこれが意味をなさないことを誓います。
これHttpRouteCollectionをWebAPIから取得した場合、特に、いくつかのカスタムルートタイプに基づいてフィルタリングしています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私が内部で行っていることを行っていませんか?