コード例 #1
0
        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)
            });
        }
コード例 #2
0
        public RouteInfoDirectRouteProvider(IHttpRouteInfoProvider infoProvider)
        {
            if (infoProvider == null)
            {
                throw new ArgumentNullException("infoProvider");
            }

            _infoProvider = infoProvider;
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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)
            };
        }