PropertyUrl 中的简单地址

SimpleAddress from PropertyUrl

  1. 我的某些页面同时具有长地址 (Page1/Page2/MyPage) 和 简单 (MyPage) 地址。
  2. 然后我想通过PropertyUrl在某个地方引用它:

    [CultureSpecific]
    [Required]
    [BackingType(typeof(PropertyUrl))]
    [Display(
        Name = "Link",
        Description = "Link to the page",
        GroupName = SystemTabNames.Content,
        Order = 1)]
    public virtual Url Link { get; set; }
    
  3. 我希望简单地址(如果存在)用于路由或url渲染而不是长地址。

如果存在,我正在寻找一些优雅的解决方案

得到一个answer from Brad McDavid

对其进行了一些修改以更好地适应我的任务:

public static string GetExternalUrl(this Url url)
{
    var content = UrlResolver.Service.Route(new UrlBuilder(url));

    return GetExternalUrl(content);
}

public static string GetExternalUrl(this ContentReference contentReference)
{
    if (ContentReference.IsNullOrEmpty(contentReference)) return null;

    var content = ServiceLocator.Current.GetInstance<IContentLoader>().Get<IContent>(contentReference);

    return GetExternalUrl(content);
}

public static string GetExternalUrl(this IContent content)
{
    var externalProperty = content?.Property["PageExternalURL"];

    return !string.IsNullOrWhiteSpace(externalProperty?.ToString()) ? $"/{externalProperty.ToString().Trim('/')}/" : null;
}