Заголовок «Access-Control-Allow-Origin» отсутствует. XmlHttpRequest - PullRequest
1 голос
/ 25 марта 2019

У меня есть объект XmlHttpRequest, и я пытаюсь отправить длинную строку данных html в Asp Net Core, чтобы сделать из него файл PDF с содержимым. Но все еще получать политику CORS. Несмотря на то, что у меня есть «Access-Control-Allow-Origin» в заголовке, это все еще проблема для меня. Уже все перепробовал с CORS. Установил cors для Asp net Core, ничего не изменилось. Все работает нормально, если я использую свой HTML-документ из локального.

Полная ошибка:

Доступ к XMLHttpRequest по адресу https: //.../getInfoWindowPdf? ' от Происхождение 'https: // ...' было заблокировано политикой CORS: Ответ на предварительный запрос не проходит проверку контроля доступа: нет Заголовок «Access-Control-Allow-Origin» присутствует в запрошенном ресурс.

function infoWindowPdf()
{
    // Create request
    let http = new XMLHttpRequest(); //XMLHttpRequest XDomainRequest
    let url = backend + "getInfoWindowPdf?";

    // Add in htmlContent header
    let htmlContent = "<style>" + style +"</style>";

    // Get needed content
    let infoWindow = document.querySelector("#section-library-modal");

    //Waits for backend to create file after all open it and remove created temporary files
    http.onreadystatechange = function()
    {
        if(http.readyState == 4)
        {
            window.open(backend + 'InfoPdf?filePath=C:\\Projects\\Web\\WebSections\\wkhtmltopdf\\bin\\pdf-export\\' + sectionName + ".pdf", '_blank');
            setTimeout(() => {getDBData('removepdf?filePath=C:\\Projects\\Web\\WebSections\\wkhtmltopdf\\bin\\pdf-export\\&filename=' + sectionName);}, 100);
        }
    };

    http.open("POST", url, true);
    http.setRequestHeader('Access-Control-Allow-Origin', '*');
    http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //application/x-www-form-urlencoded
    http.send(params);
}

Моя настройка запуска Asp Net Core для CORS.

readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

  public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy(MyAllowSpecificOrigins,
            builder =>
            {
                builder.WithOrigins("http://localhost:5000",
                                    "http://localhost:5000/websections/getInfoWindowPdf?"
                                    ).AllowAnyHeader().AllowAnyMethod();
            });
        });

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseCors(MyAllowSpecificOrigins);

        //app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Edit: Даже не пытайтесь работать с Xmlhttprequest, если вы хотите отправить некоторые данные в ваш бэкэнд-проект. Просто используйте бэкэнд прямо.

1 Ответ

0 голосов
/ 25 марта 2019
  1. Установите пакет CORS nuget.
    Install-Package Microsoft.AspNetCore.Cors
  2. Добавление служб CORS в ConfigureServices

    public void ConfigureServices(IServiceCollection services)
    {
      services.AddCors();
    }
    
  3. В методе настройки файла Startup.cs

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseCors(
            options => options.WithOrigins("http://example.com").AllowAnyMethod()
        );
        app.UseMvc();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...