public PermalinkResponse GeneratePermalink(PermalinkRequest request) { var site = GetSite(new SiteRequest() { SiteID = request.SiteID, IncludeSiteContents = true }); var slug = request.Title.Slugify(); var permalink = site.ApplicationRootPath.TrimEnd('/'); if (string.IsNullOrWhiteSpace(slug)) { throw new Exception("Invalid Title. Cannot produce slug."); } if (request.SiteContentParentID > 0) { var parent = site.SiteContents.FirstOrDefault(s => s.SiteContentID == request.SiteContentParentID); if (parent != null) { permalink = parent.Permalink; } } // 'Namespace' the permalink to help reduce collisions switch ((ContentType)request.SiteContentTypeID) { case ContentType.File: permalink += "/file"; break; } if (!permalink.EndsWith("/")) { permalink += "/"; } permalink += slug; // Validate Permalink's uniqueness var version = 0; var original = permalink; while (true) { var exists = site.SiteContents.Any(s => s.Permalink.Equals(permalink, StringComparison.InvariantCultureIgnoreCase) && s.Status != ContentStatus.Removed); if (!exists) { break; } permalink = original + "-" + ++version; } return(new PermalinkResponse() { FullUrl = string.Concat("https://", site.DomainName, permalink), Slug = slug, Permalink = permalink }); }
public PermalinkResponse GeneratePermalink(PermalinkRequest request) { var proxy = _cmsService.CreateProxy(); return(proxy.GeneratePermalink(request)); }
public PermalinkResponse GeneratePermalink([FromUri] PermalinkRequest request) { return(_cmsService.GeneratePermalink(request)); }