Заголовок «Access-Control-Allow-Origin» присутствует на запрашиваемом ресурсе - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь подключиться к своему net базовому API из приложения angular. когда я пытаюсь это сделать, я получаю сообщение об ошибке:

Access to XMLHttpRequest at 'https://localhost:44378/api/recloadprime' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

ниже приведены сообщения консоли от моего angular приложения:

enter image description here

Вот что я сделал, чтобы устранить ошибку. Я добавил services.addCors в методе ConfigureServices в файле startup.cs:

public void ConfigureServices(IServiceCollection services)
    {

        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyCorsPolicy", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
            services.AddControllers();
           services.AddDbContext<db_recloadContext>();

    }

В методе configure я поместил следующий код:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();

            }
            else
            {
                app.UseHsts();
            }
           app.UseCors("AllowAnyCorsPolicy");
           app.UseHttpsRedirection();
           app.UseRouting();
           app.UseAuthorization();
           app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

В моем контроллере есть следующее код:

namespace RecLoad.Controllers
{
    [Route("api/[controller]")]
    [EnableCors("AllowAnyCorsPolicy")]
    public class RecLoadPrimeController : ControllerBase
    {
        private readonly db_recloadContext _context;

        public RecLoadPrimeController(db_recloadContext context)
        {

            _context = context;
        }

Я следовал инструкциям, приведенным в документации Microsoft и одном из поста stackoverflow:

https://stackoverflow.com/questions/42199757/enable-options-header-for-cors-on-net-core-web-api

и статье Microsoft:

https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1

Я трачу Много времени просматривал другую документацию и пробовал другой код в файле startup.cs, но эта ошибка не исчезла.

Ниже приведен мой API, который работает нормально:

[HttpGet]
       public ActionResult<string> Get()
        {

            return "This is a test";

        }

Ниже заголовок от моего инструмента для разработчиков:

enter image description here

Я также включил расширение CORS в моем браузере chrome. Ниже изображение:

enter image description here

Любая помощь будет высоко оценена.

1 Ответ

2 голосов
/ 30 марта 2020

Чтобы это работало, вы можете попробовать следующие вещи:

1) в методе ConfigureServices, вызвать AddCors, чтобы изначально настроить службу CORS для разрешения любого источника:

services.AddCors(options => 
{
    options.AddPolicy("AllowAnyCorsPolicy", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
});

2) в методе Configure добавьте UseCors, это добавляет промежуточное ПО в конвейер веб-приложения:

app.UseRouting();
app.UseCors("AllowAnyCorsPolicy");
app.UseMvc();

Поскольку ASP. NET Core 3.1 .UseCors() необходимо вызвать после .UseRouting(), как указано в https://github.com/dotnet/aspnetcore/issues/17830.

Когда эта начальная конфигурация работает, ее можно позже изменить в соответствии с вашими требованиями.

...