private static HttpRouteEntry CreateRouteEntry(string actionName, string routePrefix, IHttpRouteInfoProvider routeProvider, IEnumerable <ReflectedHttpActionDescriptor> actionDescriptors) { string providerTemplate = routeProvider.Template; if (providerTemplate == null) { return(null); } if (providerTemplate.StartsWith("/", StringComparison.Ordinal)) { throw Error.InvalidOperation(SRResources.AttributeRoutes_InvalidTemplate, providerTemplate, actionName); } string routeTemplate = BuildRouteTemplate(routePrefix, providerTemplate); return(new HttpRouteEntry() { Name = routeProvider.Name, Template = routeTemplate, Order = routeProvider.Order, Actions = new HashSet <ReflectedHttpActionDescriptor>(actionDescriptors) }); }
public RouteInfoDirectRouteProvider(IHttpRouteInfoProvider infoProvider) { if (infoProvider == null) { throw new ArgumentNullException("infoProvider"); } _infoProvider = infoProvider; }
private static string BuildRouteTemplate(RoutePrefixAttribute routePrefix, IHttpRouteInfoProvider routeProvider, string controllerName) { string prefixTemplate = routePrefix == null ? null : routePrefix.Prefix; string providerTemplate = routeProvider == null ? null : routeProvider.RouteTemplate; if (prefixTemplate == null && providerTemplate == null) { return null; } if (prefixTemplate != null && prefixTemplate.EndsWith("/", StringComparison.OrdinalIgnoreCase)) { throw Error.InvalidOperation(SRResources.AttributeRoutes_InvalidPrefix, prefixTemplate, controllerName); } // If the provider's template starts with '/', ignore the route prefix if (providerTemplate != null && providerTemplate.StartsWith("/", StringComparison.OrdinalIgnoreCase)) { return providerTemplate.Substring(1); } if (String.IsNullOrEmpty(prefixTemplate)) { return providerTemplate ?? String.Empty; } else if (String.IsNullOrEmpty(providerTemplate)) { return prefixTemplate; } else { // template and prefix both not null - combine them return prefixTemplate + '/' + providerTemplate; } }
private static HttpRouteEntry CreateRouteEntry(string actionName, string routePrefix, IHttpRouteInfoProvider routeProvider, IEnumerable<ReflectedHttpActionDescriptor> actionDescriptors) { string providerTemplate = routeProvider.Template; if (providerTemplate == null) { return null; } if (providerTemplate.StartsWith("/", StringComparison.Ordinal)) { throw Error.InvalidOperation(SRResources.AttributeRoutes_InvalidTemplate, providerTemplate, actionName); } string routeTemplate = BuildRouteTemplate(routePrefix, providerTemplate); return new HttpRouteEntry() { Name = routeProvider.Name, Template = routeTemplate, Order = routeProvider.Order, Actions = new HashSet<ReflectedHttpActionDescriptor>(actionDescriptors) }; }