using System; using System.Collections.Generic; using System.Linq; 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 { /// /// 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 (s_defaultUrlSegmentProvider == null) { s_defaultUrlSegmentProvider = new DefaultUrlSegmentProvider(shortStringHelper); } url = s_defaultUrlSegmentProvider.GetUrlSegment(content, culture); // be safe } return url; } private static DefaultUrlSegmentProvider? s_defaultUrlSegmentProvider; } }