【发布时间】: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