1
我正在一個使用WebApi2和HttpClient的勝利形式的應用程序的測試應用程序。Web Api 2不返回ByteArrayContent到HTTPClient
我遇到了一個問題,我的HttpClient請求返回HttpResponseMessage的WebApi2控制器不返回ByteArrayContent。 WebApiController代碼
[HttpGet]
public HttpResponseMessage DownloadFilePart(string fileName)
{
var path = Server.MapPath("~/App_Data/uploads/" + fileName);
var fileArray = System.IO.File.ReadAllBytes(path);
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(fileArray)
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue(System.Web.MimeMapping.GetMimeMapping(fileName));
response.Content.Headers.ContentLength = fileArray.Length;
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = fileName
};
return response;
}
的WinForms代碼中使用的HttpClient
static async void GetFilePart(string hostrUri)
{
var httpClient = new HttpClient
{
BaseAddress = new Uri(hostrUri)
};
var request = new HttpRequestMessage(HttpMethod.Get, "/Home/DownloadFilePart/?fileName=Test.txt");
var responseMessage = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
var memoryStream = new MemoryStream();
var stream = await responseMessage.Result.Content.ReadAsByteArrayAsync();
var fileToWriteTo = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\Temp\\Test.txt";
using (var fileStream = new FileStream(fileToWriteTo, FileMode.Create, FileAccess.Write, FileShare.None))
{
//copy the content from response to filestream
fileStream.Write(stream, 0, stream.Length);
}
}
當從的WebAPI的要求回報,我寫入文件的所有字節寫入文件是從的WebAPI響應實際頭。有沒有人有任何想法這個問題可以在這裏?
感謝
第一個建議是在這裏添加的await:'VAR responseMessage =伺機httpClient.SendAsync ...',那麼你不需要'.Result'稍後,這是一個阻塞(可能導致死鎖)調用。 –
您是否可以從瀏覽器訪問API端點並下載正確的文件內容?這應該告訴你問題是否出現在Web API代碼或WinForms代碼中。我一眼就看不出問題所在。 –