如何通过 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 文件夹中。