IIS возвращает JSON вместо файла (в функции экспорта в Excel)

#c# #asp.net #vue.js #iis-8

#c# #asp.net #vue.js #iis-8

Вопрос:

У меня есть веб-приложение, которое размещается на IIS 8. Он использует VueJS и ASP.NET Веб-API. Он имеет возможность экспортировать таблицу в Excel, которая работает в нашей тестовой среде, но не работает в нашей производственной среде. В ТЕСТЕ, когда пользователь нажимает на кнопку экспорта в Excel, это позволяет пользователю загрузить документ XLSX в веб-браузере. Но в рабочей среде он возвращает JSON.

Вот код, который я использую для потоковой передачи файла:

 
var appRoot = HttpContext.Current.Server.MapPath("~/");

                        var savePath = string.Format("{0}\Temporary_Files\{1}.xlsx", appRoot, Guid.NewGuid());
                
                        workbook.SaveAs(savePath);
                        
                        HttpResponseMessage document = new HttpResponseMessage(HttpStatusCode.OK);

                        var stream = new FileStream(savePath, FileMode.Open);

                        document.Content = new StreamContent(stream);

                        document.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");

                        document.Content.Headers.ContentDisposition.FileName = "Export.xlsx";

                        document.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

                        document.Content.Headers.ContentLength = stream.Length;

                        return document;

 

Вот ответ в ТЕСТЕ:

ЗАГОЛОВКИ ОТВЕТОВ

 
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 7713
Content-Type: application/octet-stream
Expires: -1
Server: Microsoft-IIS/8.5
Content-Disposition: attachment; filename=Export.xlsx
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Date: Fri, 04 Dec 2020 17:50:54 GMT

 

Вот ответ в процессе производства:

ЗАГОЛОВКИ ОТВЕТОВ

 HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Date: Fri, 04 Dec 2020 17:45:02 GMT
Content-Length: 373
 

ТЕЛО ОТВЕТА

 {"Version":{"_Major":1,"_Minor":1,"_Build":-1,"_Revision":-1},"Content":{"Headers":[{"Key":"Content-Disposition","Value":["attachment; filename=Export.xlsx"]},{"Key":"Content-Type","Value":["application/octet-stream"]},{"Key":"Content-Length","Value":["7497"]}]},"StatusCode":200,"ReasonPhrase":"OK","Headers":[],"RequestMessage":null,"IsSuccessStatusCode":true}
 

Комментарии:

1. Согласно предоставленному вами коду, я протестировал его, но проблем не было. Я думаю, что это может быть проблема с путем. Файл xlsx не был найден правильно в IIS. Вы можете попробовать использовать абсолютный путь для чтения xlsx, чтобы узнать, есть ли проблема.

Ответ №1:

Вы можете попробовать мой способ:

 return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                reportFilename   "."   extension)