Как я могу получить вложение TFS вики-страницы через API - PullRequest
0 голосов
/ 05 марта 2020

Мне нужно загрузить вики-страницу TFS через API TFS.

Из MS Docs выглядит, как API позволяет создавать , но я не могу найти способ получить это.

Вызов GET для /_apis/wiki/wikis/{wikiIdentifier}/pages/{pageId}/attachments/{attachmentId} возвращает Method not allowed

Затем я попытался использовать API-интерфейс WIT вложения /_apis/wit/attachments/{id}, но это не так найти вложение и вернуть 404. (Я подозреваю, что он может получить доступ только к вложениям рабочих элементов.)

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

На самом деле TFS / Azure DevOps Server Wiki - это просто Git репозиторий, поэтому, если вы хотите, вы можете клонировать их и получить весь контент, используя

Git clone "https://{instance}/{collection}/{project}/_git/{projectName}"

Если это вики проекта по умолчанию , Если вы хотите получить вики на основе репо git, просто клонируйте его и получите содержимое.

Обновление:

Ваши вложения будут в .attachments папка.

0 голосов
/ 05 марта 2020

использовать 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));
}
...