// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Web.Routing;
namespace System.Web.Mvc.Routing
{
///
/// Adapts a named direct route into a top-level entry in the route table that can only be used
/// for generating a link (GetVirtualPath). We use these because the subroutes produced by direct
/// routing, don't go into the main collection and so can't be matched by name.
///
///
/// Parallel to the Web API implementation of attribute routing in System.Web.Http.Routing.LinkGenerationRoute.
///
internal class LinkGenerationRoute : Route
{
private readonly Route _innerRoute;
public LinkGenerationRoute(Route innerRoute)
: base(innerRoute.Url, innerRoute.Defaults, innerRoute.Constraints, innerRoute.DataTokens,
innerRoute.RouteHandler)
{
if (innerRoute == null)
{
throw Error.ArgumentNull("innerRoute");
}
_innerRoute = innerRoute;
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
// Claims no routes
return null;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return _innerRoute.GetVirtualPath(requestContext, values);
}
}
}