Esempio n. 1
0
        public RouteHandlerLookupResult FindRequestHandler(string verb, string applicationPath, Uri uri)
        {
            var applicationRelativePath = uri.AbsolutePath.Remove(0, applicationPath.Length);
            var handlerIdentifier       = RouteIdentifierBuilder.BuildIdentifier(verb, applicationRelativePath);

            return(FindNode(_tree, handlerIdentifier, new Dictionary <string, string>()));
        }
        internal static RouteHandlerLookupNode BuildRouteHandlerLookupTree(IEnumerable <Type> requestHandlers)
        {
            var tree = new RouteHandlerLookupNode();
            var knownRouteFragmentSets = new List <IList <string> >();

            foreach (var requestHandler in requestHandlers)
            {
                var routeAttributes = RequestHandlerDescriptor.GetRouteAttributes(requestHandler);
                if (routeAttributes.Count == 0)
                {
                    throw new InvalidOperationException(ExceptionMessageBuilder.BuildMissingRouteMessage(requestHandler));
                }

                var routeHandlerVerb  = RequestHandlerDescriptor.GetVerb(requestHandler);
                var routeFragmentSets = routeAttributes.Select(x => RouteIdentifierBuilder.BuildIdentifier(routeHandlerVerb, x.Template)).ToList();

                knownRouteFragmentSets.AddRange(routeFragmentSets);
                ScanForUnreachableRouteHandlers(knownRouteFragmentSets, routeAttributes.First().Template, requestHandler);
                ScanForUnreachableRouteParameters(routeFragmentSets, routeAttributes, requestHandler);

                foreach (var routeFragementSet in routeFragmentSets)
                {
                    tree.AddNode(routeFragementSet, requestHandler);
                }
            }

            return(tree);
        }
Esempio n. 3
0
        public RouteHandlerLookupResult FindRequestHandler(string verb, Uri uri)
        {
            var handlerIdentifier = RouteIdentifierBuilder.BuildIdentifier(verb, uri.AbsolutePath);

            return(FindNode(_tree, handlerIdentifier, new Dictionary <string, string>()));
        }