我想从Azure DevOps服务实例下载工作项详细信息,并将其推入本地TFS。
我甚至可以使用WorkItemTrackingHttpClient在C#中连接到DevOps服务器。我可以遍历我找到的工作项,查看字段,使用GetAttachmentContentAsync.下载附件。到目前为止一切顺利。
我需要完成的最后一个细节是复制/下载HTML描述字段中的嵌入式图像。我可以从HTML字段中提取HTML代码,并在其中看到一个或多个img行。
<img src=\"https://dev.azure.com/tenant/projectguid/_apis/wit/attachments/d928c8ee-f493-4d30-99a5-f62b7f36a2f7?fileName=grafik.png"\>
所有这些都有fileName grafik.png,但是有一个不同的fileGuid。
我试着使用GetAttachmentContentAsync在这个guid上下载,但这是行不通的。我试着用普通的Stream下载文件,但这不起作用,我想这是身份验证造成的。图像文件也不显示为正常附件。
所以问题是,如何从我的C#客户端从Azure C#下载这个映像,该客户端是通过API使用PAT进行身份验证的。有API调用可以用来下载这个文件吗?我还没有找到它,或者我可以用这个PAT对WebClient进行身份验证,以便它可以下载它吗?
发布于 2020-02-13 16:20:05
经过进一步的故障排除,现在GetAttachmentContentAsync可以下载映像了。
对于任何可能正在寻找类似解决方案的人来说。这就是我所做的
)
用于下载的代码
公共字符串DownloadAttachment(string,string fileName,int workItemId)
{
string[] urlSplit = url.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
int index = urlSplit.Length - 1;
Guid attGuid = new Guid(urlSplit[(index)]);
if (fileName == string.Empty)
{
fileName = urlSplit[(index)] + ".png";
}
return DownloadAttachment(attGuid, fileName, workItemId);
}
public string DownloadAttachment(Guid attGuid, string fileName, int workItemId)
{
var credentials = new VssBasicCredential(string.Empty, this.personalAccessToken);
// create instance of work item tracking http client
using (var httpClient = new WorkItemTrackingHttpClient(this.uri, credentials))
{
Stream attStream = httpClient.GetAttachmentContentAsync(attGuid).Result;
string folderPath = @"C:\Temp\WorkItemAttachments\" + workItemId;
string fileFullPath = folderPath + "\\" + fileName;
Directory.CreateDirectory(folderPath);
using (FileStream writeStream = new FileStream(fileFullPath, FileMode.Create, FileAccess.ReadWrite))
{
attStream.CopyTo(writeStream);
}
}
return fileName;
}
https://stackoverflow.com/questions/60211912
复制相似问题