如何从EpiServer PageData对象中提取友好的URL?

时间:2017-02-07 18:19:25

标签: c# asp.net-mvc episerver

使用EpiServer 8.0,我们需要得到友好的"来自C#类中的PageData对象的URL。在不转换URL的情况下,内部链接看起来像" localhost / link / [guid] .aspx"而不是" localhost / friendly-link"。我在网上发帖时提出以下建议:

var urlHelper = ServiceLocator.Current.GetInstance<UrlHelper>();
var friendlyUrl = urlHelper.ContentUrl(currentPage.Link);

但是当我尝试这个时,Visual Studio会返回以下错误:

  

&#39; System.Web.Mvc.UrlHelper&#39;不包含&#39; ContentUrl&#39;的定义并没有扩展方法&#39; ContentUrl&#39;接受类型为#System; Web.Mvc.UrlHelper&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

这是我目前拥有的代码,不使用语句,因此很容易看到正在使用的命名空间。

var urlHelper = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<System.Web.Mvc.UrlHelper>();
var friendlyUrl = urlHelper.ContentUrl(myPage.Link);

我们是否缺少项目中的引用以使ContentUrl正常工作?或者是否有一些替代代码可以用来从PageData对象获取友好的URL?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您应该使用 UrlResolver 使用System.Web.Routing;&#xA;使用EPiServer.Web.Routing;&#xA;&#xA;公共静态类PageDataExtensions&# XA; {&#XA;&#XA; public static VirtualPathData FriendlyUrl(this ContentReference contentReference)&#xA; {&#XA;返回ServiceLocator.Current.GetInstance&lt; UrlResolver&gt;()。GetVirtualPath(contentReference);&#xA; //或使用单身&#xA; // return UrlResolver.Current.GetVirtualPath(contentReference); &#XA; }&#XA;&#XA; public static VirtualPathData FriendlyUrl(this PageData pageData)&#xA; {&#XA; var contentReference = pageData.ContentLink;&#xA;返回ServiceLocator.Current.GetInstance&lt; UrlResolver&gt;()。GetVirtualPath(contentReference);&#xA; //或使用单身&#xA; // return UrlResolver.Current.GetVirtualPath(contentReference); &#XA; }&#XA;&#XA; public static VirtualPathData FriendlyUrl(此IContent iContent)&#xA; {&#XA; var contentReference = iContent.ContentLink;&#xA;返回ServiceLocator.Current.GetInstance&lt; UrlResolver&gt;()。GetVirtualPath(contentReference);&#xA; //或使用单身&#xA; // return UrlResolver.Current.GetVirtualPath(contentReference); &#XA; }&#xA;}&#xA; &#xA;&#xA;

这将返回 VirtualPathData 对象,其属性为 VirtualPath

&#xA;&#xA;

在您的情况下

&#xA;&#xA;
 < code> var friendlyUrl = currentPage.FriendlyUrl()。VirtualPath; //使用上面的扩展&#xA;  
&#xA;&#xA;

将返回 friendly-url / whatever / page

&# XA;

答案 1 :(得分:1)

System.Web.Mvc.UrlHelper没有ContentUrl方法。您可能正在考虑UrlExtensions类。

UrlExtensions在内部使用EPiServer.Web.Routing.UrlResolver。您可以使用服务定位器(或构造函数注入,最好)来获取UrlResolver的实例。然后你可以urlResolver.GetUrl(myPage.ContentLink);