gpt4 book ai didi

EpiServer - 获取页面给定文化的绝对友好 URL

转载 作者:行者123 更新时间:2023-12-01 16:19:48 24 4
gpt4 key购买 nike

我在管理网站面板中进行了以下设置

General Url is set to alloy.com

alloy.no is set for no culture

alloy.se is set for sv culture

alloy.com is set for en culture

在我的代码中,我想获取给定页面的给定语言的友好外部 URL。因此,对于搜索页面,我希望获得所有语言的绝对友好的网址。

我使用以下代码来获取页面的友好 URL(在 Anders G. Nordby blog 上找到):

var urlResolver = ServiceLocator.Current.GetInstance<UrlResolver>();
var pageAddress = urlResolver.GetUrl(reference, language);

var builder = new UrlBuilder(pageAddress);

Global.UrlRewriteProvider.ConvertToExternal(builder, null, Encoding.UTF8);

var friendlyUrl = builder.Uri.IsAbsoluteUri
? builder.ToString()
: UriSupport.AbsoluteUrlBySettings(builder.ToString());

return friendlyUrl;

如果我使用alloy.com网页并在我的自定义代码中生成友好的网址,那就很简单了。

  • - alloy.no/søk
  • se - alloy.se/sök
  • en - alloy.com/search

但是当我使用alloy.no进入编辑模式时,我将尝试生成no的地址,我得到alloy .com/søk,而它应该是合金。no/søk

我发现如果我使用alloy.no进入编辑模式,代码:

urlResolver.GetUrl(reference, language)

仅返回/søk和代码

UriSupport.AbsoluteUrlBySettings(builder.ToString())

添加通用 URL (alloy.com),而不是 Alloy.no。

如何改进此代码,以便为不同文化中的页面获取正确的主机名?

最佳答案

UrlResolver 的 GetUrl 方法将根据当前请求上下文返回相对或绝对页面的 URL。如果页面位于当前站点,则 URL 将是相对的;如果页面位于另一个站点或在请求之外进行调用,则 URL 将是绝对的。

如果您使用 EPiServer.CMS.Core 版本 8.0 或更高版本,还支持将一个站点标识为主站点。此更新还可以通过在 VirtualPathArguments 参数上设置 ForceCanonical 标志来明确请求 URL 应指向主站点。如果没有设置该标志,它将优先选择当前站点 URL 而不是主站点 URL(假设请求的内容位于当前站点)。

因此,考虑到这一点,您可以假设返回的 URL(如果不是绝对的)将相对于当前请求的站点,并将其与当前请求的 URL 安全地组合,例如:

private static string ExternalUrl(this ContentReference contentLink, CultureInfo language)
{
var urlString = UrlResolver.Current.GetUrl(contentLink, language.Name, new VirtualPathArguments { ForceCanonical = true });
if (string.IsNullOrEmpty(urlString) || HttpContext.Current == null) return urlString;

var uri = new Uri(urlString, UriKind.RelativeOrAbsolute);
if (uri.IsAbsoluteUri) return urlString;

return new Uri(HttpContext.Current.Request.Url, uri).ToString();
}

在大多数情况下,我可能不想直接使用 HttpContext.Current,而是传入当前请求 URL。但在本例中,我选择直接使用它以使示例更加包含。

关于EpiServer - 获取页面给定文化的绝对友好 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com