Проблема с типом контента в веб-API ASP.NET/.NET 4.7 для экспорта файлов PDFC#

Место общения программистов C#
Anonymous
Проблема с типом контента в веб-API ASP.NET/.NET 4.7 для экспорта файлов PDF

Сообщение Anonymous »

При запуске веб-API ASP.NET в .NET 4.7, который экспортирует файл PDF, приложение ведет себя правильно локально, возвращая файл с типом контента application/pdf. Однако при развертывании в производственной среде для Content-Type неожиданно устанавливается значение text/html; charset=utf-8.

Код: Выделить всё

[AllowAnonymous]
[HttpGet]
public FileContentResult Export(Guid id, bool? PrintLetterOnly, bool? PrintMentions)
{
var model = Show(id, true);

if (model == null)
return null;

Response.ContentType = "application/pdf";

Response.AddHeader("Content-Disposition", $"attachment; filename={id}.pdf");

var pdfResult = new ViewAsPdf("export", model)
{
FileName = id + ".pdf",
PageMargins = new Rotativa.Options.Margins(0, 0, 0, 0),
PageSize = Rotativa.Options.Size.A4,
MinimumFontSize = 20,
ContentDisposition = ContentDisposition.Attachment
};
var pdfBytes = pdfResult.BuildFile(this.ControllerContext);
return File(pdfBytes, "application/pdf", id + ".pdf");
}
Этот метод API правильно генерирует PDF-файл с использованием библиотеки Rotativa и устанавливает для Content-Type значение application/pdf. Однако в рабочей среде, несмотря на правильную конфигурацию, ответ Content-Type неожиданно меняется на text/html; charset=utf-8, в результате чего браузер интерпретирует файл как HTML, а не PDF.
Код Javascript для вызова API:

Код: Выделить всё

$("#download").click(function () {

const myHeaders = new Headers();
myHeaders.append("Cookie", "ASP.NET_SessionId=n1q1vjmx2noir5esjdlvjnqb");

const requestOptions = {
method: "GET",
headers: myHeaders,
redirect: "follow"
};
fetch("/Process/Export/@(Model.Id)?PrintLetterOnly=True", requestOptions)
.then(response => {
debugger;
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.blob();
})
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = "@(Model.Id).pdf"; // Specify the file name here
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
})
.catch((error) => console.error(error))
});
Я ожидал, что проблема связана с конфигурацией сервера IIS.
Я думаю, что проблема с конфигурацией сервера или конфигурацией IIS не позволяет вернуть .pdf >.
Я перепробовал слишком много способов конвертировать тип контента из text/html; charset=utf-8 в application/pdf

Подробнее здесь: https://stackoverflow.com/questions/786 ... ile-export

Вернуться в «C#»