У меня возникла проблема при попытке загрузить файл с помощью 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, чтобы работать, но пока безуспешно.