Ошибка CORS продолжает происходить даже после ее включения с NET Core и Angular Client - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть. net Проект Core 3.0 Web API, где я включил CORS, как указано:

ConfigureService

services.AddCors(options =>
{
  options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin());
});

И в методе настройки

app.UseCors();

И когда я вызываю эту конечную точку, используя httpclient из angular приложения, я получаю ошибку CORS.

enter image description here

И я могу видеть заголовки как:

enter image description here

Я думал, что добавление CORS в моем запуске должно решить эту проблему.

ОБНОВЛЕНИЕ:

Добавление Настройка и настройка кода обслуживания:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();

        services.AddDbContext<LabSoftwareContext>(options => options.UseSqlServer(Configuration.GetConnectionString("LabDatabase")));

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo
            {
                Version = "v1",
                Title = "Lab API",
                Description = "Lab Software APIs"
            });
        });

        services.Configure<IISServerOptions>(options =>
        {
            options.AutomaticAuthentication = false;
        });

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


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

        app.UseCors("AllowOrigin");

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

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

        app.UseSwagger();

        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API");
        });
    }

Ответы [ 3 ]

1 голос
/ 06 февраля 2020
[EnableCors("your_policy")]
public class BaseController : apiController

Одна вещь, которая работала для меня, заключалась в том, что, несмотря на использование метода Configure, мне было необходимо указать CORS в контроллерах.

1 голос
/ 06 февраля 2020

Я думаю, что root причина этого - порядок вашего промежуточного программного обеспечения в Configure() - если порядок неправильный, это может привести к неожиданным сбоям Cors.

например, я думаю, что UseCors() может потребоваться размещаться после UseHttpsRedirection()

Здесь (сложная!) таблица, объясняющая порядок промежуточного программного обеспечения, здесь: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1#built в промежуточном программном обеспечении

Ваш код изменен в соответствии с к примеру с той же страницы:

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

    app.UseHttpsRedirection();

    app.UseRouting();
    app.UseCors();

    app.UseAuthentication();
    app.UseAuthorization();

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

    app.UseSwagger();

    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API");
    });
}
1 голос
/ 06 февраля 2020

запишите их в конце метода Configure

app.UseCors(x=>x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); app.UseAuthentication();app.UseMvc();

и измените https на http

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...