【发布时间】:2017-09-21 09:48:44
【问题描述】:
我需要帮助从 Web 服务中检索图片。这是一个 GET 请求。
目前我正在检索响应,并且能够将其转换为字节数组,这正是我想要的,但是字节数组会使应用程序崩溃,所以我认为内容设置不正确.
我已尝试将响应内容设置为:
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = filename };
即使我的猜测是设置错误,或者它在 requestHeader 中设置错误。
有什么想法吗?
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseurl.uri);
client.DefaultRequestHeaders.Add("x-access-token", sessionToken);
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("image/jpeg")
);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "");
try
{
Task<HttpResponseMessage> getResponse = client.SendAsync(request);
HttpResponseMessage response = new HttpResponseMessage();
response = await getResponse;
//1. response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = filename };
//2. response.Content.Headers.ContentType =
//new MediaTypeHeaderValue("image/jpeg");//("application/octet-stream");
byte[] mybytearray = null;
if (response.IsSuccessStatusCode)
{
//3.
mybytearray = response.Content.ReadAsByteArrayAsync().Result;
}
var responseJsonString = await response.Content.ReadAsStringAsync();
System.Diagnostics.Debug.WriteLine(responseJsonString);
System.Diagnostics.Debug.WriteLine("GetReportImage ReponseCode: " + response.StatusCode);
return mybytearray;//{byte[5893197]}
}
catch (Exception ex)
{
string message = ex.Message;
return null;
}
}
【问题讨论】:
-
哪一行抛出异常?
-
response.Content.Headers.ContentDisposition是 服务器 可以设置的标头,而不是客户端。事后试图在下载的响应对象中设置它是荒谬的。您的客户端已经处理了响应并观察了服务器发送的标头。现在设置另一个标题是没有意义的。 -
ADyson 你说得对,我可能不应该纠正这样的反应。我可以看到 reponse.Content.Headers 是: {Content-Type: text/plain Content-disposition: attachment;文件名="hello2.jpg"}
标签: c# asp.net-web-api httpclient