Ошибка Cors с ASP. NET Core web Api и Angular 10 на heroku - PullRequest
0 голосов
/ 02 августа 2020

У меня возникла проблема при попытке загрузить файл с помощью HTTP GET с сервера

(index):1 Access to XMLHttpRequest at 'https://pk-portfolio-backend.herokuapp.com/api/download' from origin 'https://p-kochanowski.netlify.app' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

В настоящее время я размещаю свой бэкэнд на Heroku, а внешний интерфейс - в приложении Netlify. Проблема началась на сервере, на локальном хосте проблем вообще не было.

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
            options.AddPolicy("EnableCors", builder =>
                builder.SetIsOriginAllowed(origin => true).AllowAnyMethod().AllowAnyHeader().AllowCredentials()));

        services.AddControllers();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseCors("EnableCors");

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }

launchSettings. json

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:5001",
      "sslPort": 44309
    }
  },
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/emaildata",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      }
    },
    "PortfolioApp_Backend": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/emaildata",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      },
      "applicationUrl": "https://pk-portfolio-backend.herokuapp.com/"
    }
  }
}

DownloadController

[Route("api/[controller]")]
[ApiController]
[Authorize]
[EnableCors("EnableCors")]
public class DownloadController : ControllerBase
{
    [HttpGet]
    public IActionResult Download()
    {
        string fileName = "CV.pdf";
        string filePath = $"./assets/{fileName}";
        byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
        return File(fileBytes, "application/octet-stream");

    }
}

Я получил форму, в которой HTTP-сообщение отправляется на сервер, никаких проблем с этим запросом, проблема в скачивание файла через http GET. Пробовал много комбинаций с Cors, чтобы работать, но пока безуспешно.

...