Skip to content

Commit 50a239a

Browse files
authored
Merge pull request #12081 from umbraco/v9/bugfix/fix-invariant-redirect-tracking
Fix invariant redirect tracking
2 parents 009b36b + ff477c3 commit 50a239a

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

src/Umbraco.Core/Routing/DefaultUrlProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ internal UrlInfo GetUrlFromRoute(
159159
: DomainUtilities.DomainForNode(umbracoContext.PublishedSnapshot.Domains, _siteDomainMapper, int.Parse(route.Substring(0, pos), CultureInfo.InvariantCulture), current, culture);
160160

161161
var defaultCulture = _localizationService.GetDefaultLanguageIsoCode();
162-
if (domainUri is not null || culture is null || culture.Equals(defaultCulture, StringComparison.InvariantCultureIgnoreCase))
162+
if (domainUri is not null || string.IsNullOrEmpty(culture) || culture.Equals(defaultCulture, StringComparison.InvariantCultureIgnoreCase))
163163
{
164164
var url = AssembleUrl(domainUri, path, current, mode).ToString();
165165
return UrlInfo.Url(url, culture);

src/Umbraco.Infrastructure/Routing/RedirectTrackingHandler.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,25 +99,32 @@ private void StoreOldRoute(IContent entity, OldRoutesDictionary oldRoutes)
9999
{
100100
return;
101101
}
102-
var contentCache = publishedSnapshot.Content;
103-
var entityContent = contentCache?.GetById(entity.Id);
104-
if (entityContent == null)
102+
103+
IPublishedContentCache contentCache = publishedSnapshot.Content;
104+
IPublishedContent entityContent = contentCache?.GetById(entity.Id);
105+
if (entityContent is null)
106+
{
105107
return;
108+
}
106109

107110
// get the default affected cultures by going up the tree until we find the first culture variant entity (default to no cultures)
108111
var defaultCultures = entityContent.AncestorsOrSelf()?.FirstOrDefault(a => a.Cultures.Any())?.Cultures.Keys.ToArray()
109112
?? new[] { (string)null };
110-
foreach (var x in entityContent.DescendantsOrSelf(_variationContextAccessor))
113+
114+
foreach (IPublishedContent publishedContent in entityContent.DescendantsOrSelf(_variationContextAccessor))
111115
{
112116
// if this entity defines specific cultures, use those instead of the default ones
113-
var cultures = x.Cultures.Any() ? x.Cultures.Keys : defaultCultures;
117+
IEnumerable<string> cultures = publishedContent.Cultures.Any() ? publishedContent.Cultures.Keys : defaultCultures;
114118

115119
foreach (var culture in cultures)
116120
{
117-
var route = contentCache.GetRouteById(x.Id, culture);
121+
var route = contentCache.GetRouteById(publishedContent.Id, culture);
118122
if (IsNotRoute(route))
123+
{
119124
continue;
120-
oldRoutes[new ContentIdAndCulture(x.Id, culture)] = new ContentKeyAndOldRoute(x.Key, route);
125+
}
126+
127+
oldRoutes[new ContentIdAndCulture(publishedContent.Id, culture)] = new ContentKeyAndOldRoute(publishedContent.Key, route);
121128
}
122129
}
123130
}
@@ -135,13 +142,16 @@ private void CreateRedirects(OldRoutesDictionary oldRoutes)
135142
{
136143
_logger.LogWarning("Could not track redirects because there is no current published snapshot available.");
137144
return;
138-
}
145+
}
139146

140-
foreach (var oldRoute in oldRoutes)
147+
foreach (KeyValuePair<ContentIdAndCulture, ContentKeyAndOldRoute> oldRoute in oldRoutes)
141148
{
142149
var newRoute = contentCache.GetRouteById(oldRoute.Key.ContentId, oldRoute.Key.Culture);
143150
if (IsNotRoute(newRoute) || oldRoute.Value.OldRoute == newRoute)
151+
{
144152
continue;
153+
}
154+
145155
_redirectUrlService.Register(oldRoute.Value.OldRoute, oldRoute.Value.ContentKey, oldRoute.Key.Culture);
146156
}
147157
}

src/Umbraco.PublishedCache.NuCache/CacheKeys.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ private static string DraftOrPub(bool previewing)
1313

1414
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1515
private static string LangId(string culture)
16-
{
17-
return culture != null ? ("-L:" + culture) : string.Empty;
18-
}
16+
=> string.IsNullOrEmpty(culture) ? string.Empty : ("-L:" + culture);
1917

2018
public static string PublishedContentChildren(Guid contentUid, bool previewing)
2119
{

0 commit comments

Comments
 (0)