【问题标题】:Not able to download attachemet in devops rest api with proper filename and extension无法在 devops rest api 中下载具有正确文件名和扩展名的附件
【发布时间】:2020-12-07 13:44:57
【问题描述】:

我试图使用 REST API 从 devops 下载工作项附件。文件正在下载,但文件名和扩展名不正确,下载后无法打开。

var personalaccesstoken = "";
var DeserializedClass = new List<Responcejson>();
string bseurl = "https://xxx/_apis/wit/attachments/xxxx-0cdb-4f53-9785-55d642d603e7?fileName=abc.png&download=true&api-version=5.0";

try
{
    using (HttpClient client = new HttpClient())
    {
        client.DefaultRequestHeaders.Accept.Add(
                    new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                    Convert.ToBase64String(
                        System.Text.ASCIIEncoding.ASCII.GetBytes(
                            string.Format("{0}:{1}", "", personalaccesstoken))));

        using (HttpResponseMessage response = await client.GetAsync(bseurl))
        {
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            //JObject data = JObject.Parse(responseBody);
            return responseBody;
        }
    }
}
catch (Exception ex)
{
    return ex.ToString();
}

但这会将文件下载为“Devops”,没有文件名和扩展名....

提前致谢

【问题讨论】:

  • 您似乎已经知道文件名,因为它在您发送的 URL 中,那么为什么不直接使用它呢?附言您似乎正在尝试将图像文件作为文本下载,这不太可能很好地工作,因为图像是二进制数据。 stackoverflow.com/questions/45711428/… 可能会帮助你
  • 您需要在响应中设置Content-Disposition 标头。如果 Azure Devops 提供它,您可以从请求中返回它。
  • 关于您使用 HttpClient 的旁注:不应该这样创建/处置它。在这里查看原因:stackoverflow.com/questions/15705092/…

标签: c# asp.net-core devops azure-devops-rest-api


【解决方案1】:

在执行 Azure DevOps REST API“Downloads an attachment”时,您可以使用媒体类型“application/octet-stream”或“application/zip”。见here

我在您的代码中注意到了这一点,

字符串 responseBody = 等待 response.Content.ReadAsStringAsync();

如果附件是图片,这可能会导致问题。

此外,还有相应的客户端 API,您可以直接在您的 C# 代码中使用。 见“WorkItemTrackingHttpClientBase.GetAttachmentContentAsync Method”。

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 2019-12-01
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多