Ejemplo n.º 1
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);
        }