即使在启用 .NET Core 和 Angular 客户端后,CORS 错误仍然会发生

TBA*_*TBA 3 cors asp.net-core angular

我有 .net Core 3.0 Web API 项目,其中我已启用 CORS,如下所示:

配置服务

services.AddCors(options =>
{
  options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin());
});
Run Code Online (Sandbox Code Playgroud)

并在配置方法中

app.UseCors();

当我从角度应用程序使用 httpclient 调用这个端点时,我会收到 CORS 错误。

在此输入图像描述

我可以看到标题,如下所示:

在此输入图像描述

我认为在我的启动中添加 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");
        });
    }
Run Code Online (Sandbox Code Playgroud)

Ste*_*and 6

我认为其根本原因是中间件的顺序Configure()- 如果顺序不正确,可能会导致意外的 Cors 故障。

例如我认为UseCors()可能需要放在之后UseHttpsRedirection()

这里有一个(复杂!)表解释了中间件的排序: https: //learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/ ?view=aspnetcore-3.1#built-in-middleware

您的代码根据同一页面的示例进行修改:

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");
    });
}
Run Code Online (Sandbox Code Playgroud)