如何通过 API 获取 TFS wiki 页面附件
How do I get TFS wiki page attachment over API
我需要通过 TFS API 下载 TFS wiki 页面附件。
从 MS Docs 看来,API 允许 create 它,但我似乎无法找到 获取 它的方法。
在 /_apis/wiki/wikis/{wikiIdentifier}/pages/{pageId}/attachments/{attachmentId}
returns Method not allowed
上调用 GET
然后我尝试使用 WIT 附件 API /_apis/wit/attachments/{id}
但是那个找不到附件和 returns 404。(我怀疑它只能访问工作项目附件。 )
使用GitHttpClient.GetItemContentAsync({project}, {repositoryId}, path:{path})
哪里
path
是维基页面内容中的 "/.attachments/my attached file-89553727-xxx-yyy-zzz-829fbe167411.docx"
(注意前导 /
)
在我开始尝试 GitHttpClient
并列出我的存储库中的所有项目后,完全是偶然发现的。其中一项是附件,它填充了这条路径,然后我将其插入 GetItemContentAsync
方法,瞧。
我的一段代码:
var uri = new Uri(_tfsBaseUri);
var credentials = GetCredentials();
using (var tpc = new TfsTeamProjectCollection(uri, credentials))
{
var wikiClient = tpc.GetClient<WikiHttpClient>();
var gitClient = tpc.GetClient<GitHttpClient>();
var mypage = wikiClient.GetPageAsync(_tfsProject, _tfsWiki, "My page name", includeContent: true).GetAwaiter().GetResult();
var pageContent = mypage.Page.Content;
if (pageContent.Contains("(.attachments"))
{
var path = "";// parse out the attachment path
var attachmentContent = gitClient.GetItemContentAsync(_tfsProject, new Guid("_tfsWiki repo ID"), path: path).GetAwaiter().GetResult();
}
}
private static VssCredentials GetCredentials()
{
return new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(CredentialCache.DefaultCredentials));
}
实际上 TFS/Azure DevOps Server Wiki 只是 Git 存储库,因此如果您愿意,可以克隆它们并使用
获取所有内容
Git clone "https://{instance}/{collection}/{project}/_git/{projectName}"
如果是默认项目wiki。如果您想获得基于 git 存储库的 wiki,那么您只需克隆有问题的存储库并获取内容。
更新:
您的附件将在 .attachments 文件夹中。
我需要通过 TFS API 下载 TFS wiki 页面附件。
从 MS Docs 看来,API 允许 create 它,但我似乎无法找到 获取 它的方法。
在 /_apis/wiki/wikis/{wikiIdentifier}/pages/{pageId}/attachments/{attachmentId}
returns Method not allowed
然后我尝试使用 WIT 附件 API /_apis/wit/attachments/{id}
但是那个找不到附件和 returns 404。(我怀疑它只能访问工作项目附件。 )
使用GitHttpClient.GetItemContentAsync({project}, {repositoryId}, path:{path})
哪里
path
是维基页面内容中的 "/.attachments/my attached file-89553727-xxx-yyy-zzz-829fbe167411.docx"
(注意前导 /
)
在我开始尝试 GitHttpClient
并列出我的存储库中的所有项目后,完全是偶然发现的。其中一项是附件,它填充了这条路径,然后我将其插入 GetItemContentAsync
方法,瞧。
我的一段代码:
var uri = new Uri(_tfsBaseUri);
var credentials = GetCredentials();
using (var tpc = new TfsTeamProjectCollection(uri, credentials))
{
var wikiClient = tpc.GetClient<WikiHttpClient>();
var gitClient = tpc.GetClient<GitHttpClient>();
var mypage = wikiClient.GetPageAsync(_tfsProject, _tfsWiki, "My page name", includeContent: true).GetAwaiter().GetResult();
var pageContent = mypage.Page.Content;
if (pageContent.Contains("(.attachments"))
{
var path = "";// parse out the attachment path
var attachmentContent = gitClient.GetItemContentAsync(_tfsProject, new Guid("_tfsWiki repo ID"), path: path).GetAwaiter().GetResult();
}
}
private static VssCredentials GetCredentials()
{
return new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(CredentialCache.DefaultCredentials));
}
实际上 TFS/Azure DevOps Server Wiki 只是 Git 存储库,因此如果您愿意,可以克隆它们并使用
获取所有内容Git clone "https://{instance}/{collection}/{project}/_git/{projectName}"
如果是默认项目wiki。如果您想获得基于 git 存储库的 wiki,那么您只需克隆有问题的存储库并获取内容。
更新:
您的附件将在 .attachments 文件夹中。