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); }
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>()); }
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); }