私は、WinFormsアプリケーションでWebApi2とHttpClientを使用してテストアプリケーションを作成しています。Web Api 2がByteArrayContentをHTTPClientに返さない
私は、HttpResponseMessageを返すWebApi2コントローラへの私のHttpClientリクエストが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コードかどうかを示すはずです。一見して私は問題を見つけていない。 –