EPiServer:使用语言标记获取友好的URL?

问题描述 投票:0回答:2

我的变量langURL目前返回一个非友好的URL,如下所示:http://localhost:57299/link/457fee1669e348febf67ecb57b281945.aspx?epslanguage=de-AT

是否可以获得友好的网址?

public static IHtmlString HrefLangLinks(this PageData currentPage)
{

    var availablePageLanguages = currentPage.ExistingLanguages.Select(culture => culture.Name).ToArray();
    var Output = "";
    var langURL = "";

    foreach (string listitem in availablePageLanguages)
    {
        langURL = EPiServer.Web.UriUtil.AddLanguageSelection(currentPage.LinkURL, listitem);
        Output += "<link href=\"" + langURL + "\" hreflang=\"" + listitem + "\" rel=\"alternate\" >";
    }


    // Dictionary<String, String>
    return new HtmlString(Output.ToString());
}

对于每个页面,我希望获得带有语言标记的友好URL,例如:

  • /
  • /的-D E
  • /和-DE
c# episerver
2个回答
1
投票

是的,这是可能的。试试这个:

public string GetExternalUrl(string linkUrl)
        {
            var result = string.Empty;
            try
            {
                var url = new UrlBuilder(linkUrl);
                Global.UrlRewriteProvider.ConvertToExternal(url, linkUrl, Encoding.UTF8);
                result = url.ToString();
            }
            catch (Exception)
            {
            }
            return result;
        }

0
投票

幸运的是,我们不再需要处理LinkURL财产了。相反,我会使用UrlResolver

您的代码可以快速重写为以下内容:

public static IHtmlString HrefLangLinks(this PageData currentPage)
{
    // StringBuilder usually performs better than concatenating a variable number of strings.
    var sb = new StringBuilder;

    foreach (string language in currentPage.ExistingLanguages.Select(culture => culture.Name))
    {
        // Get the URL to the page in the individual languages, respecting the
        // website language settings (sometimes a language is bound to another hostname)
        string url = UrlResolver.Current.GetUrl(currentPage.ContentLink, language);
        sb.AppendLine($"<link href=\"{url}\" hreflang=\"{language}\" rel=\"alternate\"/>");
    }

    return new MvcHtmlString(sb.ToString());
}

但我通常会将这样的东西当作Razor助手来实现。

© www.soinside.com 2019 - 2024. All rights reserved.