EPiServer: Получить удобный URL с языковым флагом? - PullRequest
0 голосов
/ 08 апреля 2019

Моя переменная langURL в настоящее время возвращает не дружественный URL-адрес, например: http://localhost:57299/link/457fee1669e348febf67ecb57b281945.aspx?epslanguage=de-AT

Можно ли получить дружественный URL-адрес?

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 с языковым флагом, например:

  • /
  • / de-DE
  • / en-DE

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Да, это возможно. Попробуйте это:

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 голосов
/ 08 апреля 2019

К счастью, нам больше не нужно иметь дело со свойством 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.

...