CORS блокирует запрос, который генерирует pdf файл из переданного html
У меня есть API написанный на asp.net core. Клиент VueJs. Все запросы работают отлично и CORS их не блокирует так как у меня в startup.cs
app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
Но есть запрос на генерацию pdf файла. Он отправляет на сервер html в виде текста и формирует из него pdf. Именно этот запрос CORS и блокирует.
Хостинг находится на рег.ру, писал в техподдержку, но решение так мы и не нашли. Предлагали добавить следующий код в web.config
<httpProtocol>
<customHeaders>
<add name=«Access-Control-Allow-Origin» value="*" />
<add name=«Access-Control-Allow-Headers» value=«Content-Type» />
<add name=«Access-Control-Allow-Methods» value=«GET,POST,PUT,DELETE,OPTIONS» />
<add name=«Access-Control-Allow-Credentials» value=«true» />
</customHeaders>
</httpProtocol>
При добавлении этой настройки перестают работать все запросы. Не могу найти решение.
Вот как выглядит web.config после исправления по последним комментам:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\CoreAPI.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
<system.webServer>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" areas="" verbosity="Verbose" />
<add provider="ASPNET" areas="AppServices,Infrastructure,Module,Page" verbosity="Verbose" />
<add provider="ISAPI Extension" areas="" verbosity="Verbose" />
<add provider="WWW Server" areas="ANCM,Authentication,Cache,CGI,Compression,FastCGI,Filter,Module,RequestNotifications,RequestRouting,Rewrite,Security,StaticFile,WebSocket" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="400-999" />
</add>
</traceFailedRequests>
</tracing>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
<!--ProjectGuid: 9FE4662B-DFAD-4437-9FFD-46D35F2E83E1-->
При этом перестают работать все запросы. Если я удаляю настройку , тогда все начинает работать кроме генерации PDF.
Класс Startup.cs выглядит следующим образом:

Метод сервиса PDF:
import { timetableAPI } from '../common/axios-common';
export function SaveHtmlToPdf(pdfSaveModelDto) {
const url = 'Pdf/SaveHtmlToPdf';
return new Promise((resolve, reject) => {
timetableAPI.post(url, pdfSaveModelDto,
{
responseType: 'arraybuffer',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/pdf'
}
})
.then(response => {
return resolve(response);
}).catch(error => {
return reject(error);
});
});
}
Метод сохранения PDF:
saveToPdf() {
let element = document.getElementById("timetable-table");
let outerHTML = element.outerHTML;
let tableHeight = document.getElementById("timetable-table").offsetHeight;
let tableWidth = document.getElementById("first-tr").offsetWidth;
let pdfSaveModelDto = {
html: outerHTML,
name: "Расписание " + this.queryString.toUpperCase(),
timetableHeight: tableHeight,
timetableWidth: tableWidth,
};
this.isLoading = true;
SaveHtmlToPdf(pdfSaveModelDto)
.then((response) => {
let blob = new Blob([response.data], { type: "application/pdf" });
let link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = "Расписание " + this.queryString.toUpperCase();
link.click();
})
.catch((error) => {
this.$ntf.Error("Неудалось получить pdf.", error);
})
.finally(() => {
this.isLoading = false;
});
},
Ответы (1 шт):
Покопавшись в логах обнаружил, что API не может найти библиотеку, которая генерирует PDF. Из-за этого, как я понимаю, получив пустой заголовок OPTION браузер думает, что проблема в CORS.

