我已尝试在http://dev.ektron.com/forum.aspx?g=posts&t=29497
的Ektron论坛上提出的答案这些使用
Ektron.Cms.API.UrlAliasing.UrlAliasManual
和
Ektron.Cms.API.UrlAliasing.UrlAliasAuto
对象。但是,我在Ektron版本8.6 sp1中工作,GetItemForContent和GetDefaultAlias方法分别抛出“未实现”异常,导致我相信它们不再起作用。
除此之外,我甚至不清楚这些是否会一般地工作,因为我看不到在没有先调用这些方法的情况下检测特定内容是否具有手动,自动或任何别名的方法。有谁知道检索这些别名的当前最佳做法?
答案 0 :(得分:2)
好的,经过一些工作区文件的挖掘(答案在\ Workarea \ controls \ content \ UrlAliasing \ editAliasesTab.ascx.cs中),当前的方法在命名空间Ektron.Cms.Framework.Settings.UrlAliasing
中使用了一个frameworkAPI管理器对象
此对象似乎能够处理手动和自动别名,尽管其标准“get”方法仅在我的测试中返回自动别名,并且getDefaultAlias方法始终返回空字符串。当使用位于'Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasCriteria'中的Alias Criteria对象时,管理器按预期工作,返回所有关联的别名。返回的对象是别名类型的通用对象,并将指示它们是否为isDefault属性的默认值。
以下将删除所有别名,无论其类型如何:
Ektron.Cms.Framework.Settings.UrlAliasing.AliasManager aCRUD = new ektron.Cms.Framework.Settings.UrlAliasing.AliasManager();
Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasCriteria aSelector = new Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasCriteria();
aSelector.AddFilter(Ektron.Cms.Settings.UrlAliasing.DataObjects.AliasProperty.TargetId, Ektron.Cms.Common.CriteriaFilterOperator.EqualTo, contentId);
var allAlias = aCRUD.GetList(aSelector);
答案 1 :(得分:0)
如果您正在寻找内容的直接链接(可能是任何别名),则以下代码将起作用:
ContentManager cm = new ContentManager();
ContentData cd = cm.GetItem(contentId);
string link = cd.QuickLink();