我想在Alfresco Share中创建指向特定文件夹的HTTP链接。
Alfresco Share以相当复杂的方式对路径进行编码:
thesite
http://server/share/page/site/thesite/documentlibrary
thesite/documentLibrary/somefolder/anotherfolder
http://server/share/page/site/thesite/documentlibrary#filter=path|%2Fsomefolder%2Fanotherfolder
thesite/documentLibrary/éß和ệ
http://server/share/page/site/s1/documentlibrary#filter=path|%2F%25E9%25DF%25u548C%25u1EC7
thesite/documentLibrary/a#bc/éß和ệ
http://server/share/page/site/thesite/documentlibrary#filter=path%7C%2Fa%2523bc%2F%25E9%25DF%25u548C%25u1EC7%7C
我怀疑它是一个双重URLencode,但斜杠除外,只有URL编码一次。
但我不是百分百肯定。
是否有进行此编码的C#库?
答案 0 :(得分:4)
您可能会发现使用旧版?path=
参数更轻松地创建文档库文件夹URL。
使用示例路径/Sample Content/∞⊕⊗¤☺☹★☆★☆★
而不是构建表单的网址
http://alfresco.example/share/page/site/mike/documentlibrary#filter=path%7C%2FSample%2520Content%2F%25u221E%25u2295%25u2297%25A4%25u263A%25u2639%25u2605%25u2606%25u2605%25u2606%25u2605%7C&page=1
你可以生成一个看起来像
的https://alfresco.example/share/page/site/mike/documentlibrary?path=/Sample%20Content/%E2%88%9E%E2%8A%95%E2%8A%97%C2%A4%E2%98%BA%E2%98%B9%E2%98%85%E2%98%86%E2%98%85%E2%98%86%E2%98%85
因此,使用C#,您将在路径上使用Uri.EscapeUriString()
,并使用?path=
答案 1 :(得分:2)
检查org.alfresco.repo.web.scripts.site.SiteShareViewUrlGet
是否有实施。它不是很优雅,但看起来很完整,可能是你自己班级的一个很好的起点。
确实应该有一个助手类,但也许我错过了一些东西。
答案 2 :(得分:0)
我找不到一个库,所以我写了下面的代码:
if (path.Contains("documentLibrary"))
{
int firstSlashPosition = path.IndexOf("/");
string siteName = path.Substring(0, firstSlashPosition);
string pathWithinSite = path.Substring(firstSlashPosition + "/documentLibrary".Length);
string escapedPathWithinSite = HttpUtility.UrlEncode(pathWithinSite);
string reescapedPathWithinSite = HttpUtility.UrlEncode(escapedPathWithinSite);
string sharePath = reescapedPathWithinSite.Replace("%252f", "%2F");
return "http://server/share/page/site/" + siteName + "/documentlibrary#filter=path|" + sharePath;
}
else
{
// Site name only.
return "http://server/share/page/site/" + path + "/documentlibrary";
}
非常感谢任何更正或更好的答案!