@Stazhor

Почему браузер не скачивает файл, который передает Web Api?

Имеется Web Api сделанный на .net core 2.1. В нем есть действие - скачивание файла. Код действия:
[HttpGet("download/{id}")]
        public HttpResponseMessage DownloadDocumentFile(int id)
        {
            logger.Info(BuildInfoMessage(nameof(DownloadDocumentFile), $"{nameof(id)} = {id}"));

            var message = new HttpResponseMessage(HttpStatusCode.OK);
            
            try
            {
                var file = documents.GetDownloadableFile(id);

                message.Content = new ByteArrayContent(file.DocumentData);
                message.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = $"{file.DocumentName}.zip"
                };
                message.Content.Headers.ContentLength = file.DocumentData.LongLength;
                message.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");

            }
            catch (Exception ex)
            {
                logger.Error(BuildErrorMessage(nameof(DownloadDocumentFile), ex, $"{nameof(id)} = {id}"));

                message.Content = null;
                message.StatusCode = HttpStatusCode.InternalServerError;
            }

            return message;
        }


Но при обращении к этому действию из браузера идет ответ в виде json-строки:
{"version":{"major":1,"minor":1,"build":-1,"revision":-1,"majorRevision":-1,"minorRevision":-1},"content":{"headers":[{"key":"Content-Disposition","value":["attachment; filename=TestDocument43.zip"]},{"key":"Content-Length","value":["796683"]},{"key":"Content-Type","value":["application/zip"]}]},"statusCode":200,"reasonPhrase":"OK","headers":[],"requestMessage":null,"isSuccessStatusCode":true}
, а сам файл не скачивается. Искал в интернете ответы на этот вопрос, вроде все сделано так, как пишут люди, но результат не совпадает.
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
@cicatrix
было бы большой ошибкой думать
Ты возвращаешь HttpResponseMessage, а надо возвратить FileContentResult
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы