Я пытаюсь написать сервис webapi, который будет возвращать содержимое файла. В вызывающей службе я не могу получить фактическое содержимое файла, только заголовок содержимого (в ByteArrayContent)
Я попытался прочитать файл и создать соответствующее ответное сообщение. Когда вызывающая служба получает ответ http и делает ReadAsByteArrayAsync()
, единственные данные, которые я получаю, - это, по сути, заголовок ответа http.
[HttpGet]
[Route("{type}")]
public async Task<HttpResponseMessage> GetFile(string type, string fileName)
{
try
{
var filePath = @"...\" + fileName;
var stream = new MemoryStream();
var fileStream = System.IO.File.OpenRead(filePath);
stream.SetLength(fileStream.Length);
await fileStream.ReadAsync(stream.GetBuffer(), 0, (int)fileStream.Length);
stream.Position = 0;
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(stream.ToArray())
};
response.Content.Headers.ContentLength = stream.Length;
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return response;
}
catch (KeyNotFoundException)
{
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
Это выглядит правильно, когда я проверяю ответ перед отправкой:
{StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.ByteArrayContent, Headers:{ Content-Length: 222772 Content-Disposition: attachment; filename=blablablah.JPG Content-Type: application/octet-stream}}
Когда я смотрю на сервисную сторону, которая называется webapi
var httpResponse = await httpClient.GetAsync(builder.ToString());
var image = await httpResponse.Content.ReadAsByteArrayAsync();
if (image != null && image.Length > 0)
{
var x = Encoding.Default.GetString(image);
return result;
}
httpResponse:
{StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:{ Transfer-Encoding: chunked X-SourceFiles: =?UTF-8?B?QzpcUHJvamVjdHNcRmlsZVN0cmVhbUFwaVxGaWxlU3RyZWFtQXBpXGFwaVxGaWxlXGV4cGVuc2VyZWNlaXB0?= Date: Fri, 11 Jan 2019 19:39:54 GMT Server: Kestrel X-Powered-By: ASP.NET Content-Type: application/json; charset=utf-8}}
и фактическое содержимое (из ReadAsByteArrayAsync ()) равно
"{\"version\":{\"major\":1,\"minor\":1,\"build\":-1,\"revision\":-1,\"majorRevision\":-1,\"minorRevision\":-1},\"content\":{\"headers\":[{\"key\":\"Content-Length\",\"value\":[\"222772\"]},{\"key\":\"Content-Disposition\",\"value\":[\"attachment; filename=47670af0-1916-4257-bbc2-b5f7da4c4839.JPG\"]},{\"key\":\"Content-Type\",\"value\":[\"application/octet-stream\"]}]},\"statusCode\":200,\"reasonPhrase\":\"OK\",\"headers\":[],\"requestMessage\":null,\"isSuccessStatusCode\":true}"