0

我们正在尝试在 VSTS 的 HTML 字段中获取内联图像的附件输入流。

代码在 C# 中。我们正在使用 Visual Studion 2015 社区版和 Microsoft Team Foundation Server 对象模型 2012 和 .NET 框架 4.0 或更高版本。

以下代码的附件 URI 变量值: https ://opshubautomation.visualstudio.com/WorkItemTracking/v1.0/AttachFileHandler.ashx?FileNameGuid=20157b52-3c9a-4bb7-bc63-f6b38fc1d54c&FileName=Att.png

代码片段如下所述。

{
WebClient webClient = new WebClient();
webClient.Credentials = (ICredentials)connectionInfo.tfsServerConfig.Credentials;

    // 1. Approach 1 using webClient.DownloadFile() which downloads the file in current directory locally
    webClient.DownloadFile(attachmentURI, "aoaob.png");

    // 2. Approach 2 using webClient.DownloadData() which loads the byte array of the attachment hosted at given // attachment URI
    byte[] data = webClient.DownloadData(attachmentURI);
    return data;
}

使用上面的代码,我们尝试访问托管在TFS 版本 2013、2015 和 2017中的相同内联图像(在实体的任何 HTML 字段中) 。对于每个版本的 TFS,我们都能够加载正确的内联图像附件输入流。但相反,使用相同的代码和其他基础架构,我们尝试在Microsoft VSTS(相同的实体和相同的 HTML 字段)中加载附件输入流,每次我们得到一个大约 14 KB 大小的损坏 PNG 文件,无论使用上述附件 URI 获取的图像的大小。上面附件 URI 中托管的 PNG 图像的原始大小为 113 KB。

但是,我们仍然无法使用上述方法在 Microsoft VSTS 中的实体中获得正确的输入流(而在上述所有版本的 TFS 中加载了正确的图像)。

请帮助我们解决此问题或告诉我们我们做错了什么。

4

1 回答 1

0

这可能是由使用 VSTS 的身份验证引起的。与 TFS 不同。要使用 WebClient 对 VSTS 进行身份验证,您需要启用备用凭据或创建个人访问令牌,然后使用基本身份验证,以下是供您参考的代码示例:

    WebClient wc = new WebClient();
    string altusername = "xxxxxx";
    string altpassword = "xxxxxx";
    string auth = altusername + ":" + altpassword;
    auth = Convert.ToBase64String(Encoding.Default.GetBytes(auth));
    wc.Headers["Authorization"] = "Basic" + auth;
    Uri uri = new Uri("https://xxxxxxxx");
    wc.DownloadFile(uri, "aoaob.png");
于 2017-11-30T07:34:32.803 回答