Ejemplo n.º 1
0
        public RouteValueDictionary Match(Uri url, RouteValueDictionary defaults)
        {
            if (url == null)
            {
                return(null);
            }
            ParsedRoutePattern   parsedUrl = Parse(url.ToString());
            RouteValueDictionary values    = defaults != null ? new RouteValueDictionary(defaults) : new RouteValueDictionary();

            // check Scheme
            if (IsVariableSegment(SchemeSegment))
            {
                string variableName = GetVariableName(SchemeSegment);
                values[variableName] = parsedUrl.SchemeSegment;
            }
            else if (!parsedUrl.SchemeSegment.Equals(SchemeSegment, StringComparison.InvariantCultureIgnoreCase) && !"".Equals(SchemeSegment))
            {
                return(null);
            }

            // check Host
            if (!SegmentsMatchs(hostSegments, parsedUrl.hostSegments, values, HostSeparator, true) && !"".Equals(HostPattern))
            {
                return(null);
            }

            // check Path
            if (!SegmentsMatchs(pathSegments, parsedUrl.pathSegments, values, PathDelimiter))
            {
                return(null);
            }
            return(values);
        }
Ejemplo n.º 2
0
        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
            Uri requestUrl    = requestContext.HttpContext.Request.Url;
            var defaultScheme = requestUrl != null ? requestUrl.Scheme : string.Empty;

            var contextValues = new RouteValueDictionary(requestContext.RouteData.Values);

            if (parsedRoute.HasHostPattern && requestUrl != null)
            {
                // create a fake patterm just to extract variables values from host
                var pattern         = (string.IsNullOrEmpty(defaultScheme) ? "http://" : defaultScheme + "://") + parsedRoute.HostPattern;
                var parsedHostRoute = ParsedRoutePattern.Parse(pattern);
                contextValues.MergeWith(parsedHostRoute.Match(requestUrl, null));
            }

            var matchUrl = parsedRoute.CreateUrlWhenMatch(defaultScheme, values, Defaults, contextValues);

            if (matchUrl == null || !MatchConstraints(matchUrl.UsedValues))
            {
                return(null);
            }
            var virtualPathData = new VirtualPathData(this, matchUrl.Url);

            virtualPathData.DataTokens.OverrideMergeWith(DataTokens);

            return(virtualPathData);
        }