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 выглядит следующим образом: введите сюда описание изображения

Web.config выглядит так: введите сюда описание изображения

Метод сервиса 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 шт):

Автор решения: Vivus

Покопавшись в логах обнаружил, что API не может найти библиотеку, которая генерирует PDF. Из-за этого, как я понимаю, получив пустой заголовок OPTION браузер думает, что проблема в CORS.

→ Ссылка