Exemplo n.º 1
0
        public VirtualPathData GetVirtualPath(VirtualPathContext context)
        {
            string contentItemId = context.Values["contentItemId"]?.ToString();

            if (string.IsNullOrEmpty(contentItemId))
            {
                return(null);
            }

            var displayRouteData = GetContentItemDisplayRoutes(context.HttpContext, contentItemId).Result;

            if (string.Equals(context.Values["area"]?.ToString(), displayRouteData?["area"]?.ToString(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(context.Values["controller"]?.ToString(), displayRouteData?["controller"]?.ToString(), StringComparison.OrdinalIgnoreCase) &&
                string.Equals(context.Values["action"]?.ToString(), displayRouteData?["action"]?.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                if (_entries.TryGetPath(contentItemId, out string path))
                {
                    if (context.Values.Count > 4)
                    {
                        foreach (var data in context.Values)
                        {
                            if (!_keys.Contains(data.Key))
                            {
                                path = QueryHelpers.AddQueryString(path, data.Key, data.Value.ToString());
                            }
                        }
                    }

                    return(new VirtualPathData(_target, path));
                }
            }

            return(null);
        }
Exemplo n.º 2
0
        public VirtualPathData GetVirtualPath(VirtualPathContext context)
        {
            if (context.Values["area"]?.ToString() == "Orchard.Contents" &&
                context.Values["controller"]?.ToString() == "Item" &&
                context.Values["action"]?.ToString() == "Display" &&
                context.Values["contentItemId"] != null)
            {
                // Matching route value, lookup for the id

                string contentItemId = context.Values["contentItemId"]?.ToString();
                string path;

                if (_entries.TryGetPath(contentItemId, out path))
                {
                    if (context.Values.Count > 4)
                    {
                        foreach (var data in context.Values)
                        {
                            if (!_keys.Contains(data.Key))
                            {
                                path = QueryHelpers.AddQueryString(path, data.Key, data.Value.ToString());
                            }
                        }
                    }

                    return(new VirtualPathData(_target, path));
                }
            }

            return(null);
        }
        public IEnumerable <Endpoint> FindEndpoints(RouteValuesAddress address)
        {
            if (address.AmbientValues == null || address.ExplicitValues == null)
            {
                return(Enumerable.Empty <Endpoint>());
            }

            string contentItemId = address.ExplicitValues[_options.ContentItemIdKey]?.ToString();

            if (string.IsNullOrEmpty(contentItemId) || !_entries.TryGetPath(contentItemId, out var path))
            {
                return(Enumerable.Empty <Endpoint>());
            }

            if (Match(address.ExplicitValues))
            {
                var routeValues = new RouteValueDictionary(address.ExplicitValues);

                if (address.ExplicitValues.Count > _options.GlobalRouteValues.Count + 1)
                {
                    foreach (var entry in address.ExplicitValues)
                    {
                        if (String.Equals(entry.Key, _options.ContentItemIdKey, StringComparison.OrdinalIgnoreCase))
                        {
                            continue;
                        }

                        if (!_options.GlobalRouteValues.ContainsKey(entry.Key))
                        {
                            routeValues.Remove(entry.Key);
                        }
                    }
                }

                var endpoint = new RouteEndpoint
                               (
                    c => null,
                    RoutePatternFactory.Parse(path, routeValues, null),
                    0,
                    null,
                    null
                               );

                return(new[] { endpoint });
            }

            return(Enumerable.Empty <Endpoint>());
        }
Exemplo n.º 4
0
        public VirtualPathData GetVirtualPath(VirtualPathContext context)
        {
            if (context.Values["area"]?.ToString() == "Orchard.Contents" &&
                context.Values["controller"]?.ToString() == "Item" &&
                context.Values["action"]?.ToString() == "Display" &&
                context.Values["id"] != null)
            {
                // Matching route value, lookup for the id

                int    contentItemId = int.Parse(context.Values["id"]?.ToString());
                string path;

                if (_entries.TryGetPath(contentItemId, out path))
                {
                    return(new VirtualPathData(_target, path));
                }
            }

            return(null);
        }