using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Strings; namespace Umbraco.Extensions; /// /// Provides extension methods to IContentBase to get URL segments. /// public static class ContentBaseExtensions { private static DefaultUrlSegmentProvider? _defaultUrlSegmentProvider; /// /// Gets the URL segment for a specified content and culture. /// /// The content. /// /// /// The culture. /// The URL segment. public static string? GetUrlSegment(this IContentBase content, IShortStringHelper shortStringHelper, IEnumerable urlSegmentProviders, string? culture = null) { if (content == null) { throw new ArgumentNullException(nameof(content)); } if (urlSegmentProviders == null) { throw new ArgumentNullException(nameof(urlSegmentProviders)); } var url = urlSegmentProviders.Select(p => p.GetUrlSegment(content, culture)).FirstOrDefault(u => u != null); if (url == null) { if (_defaultUrlSegmentProvider == null) { _defaultUrlSegmentProvider = new DefaultUrlSegmentProvider(shortStringHelper); } url = _defaultUrlSegmentProvider.GetUrlSegment(content, culture); // be safe } return url; } }