ASP.NET Core - 尽管允许所有来源,但发布请求时出现 CORS 错误

问题描述 投票:0回答:1

每当我从我制作的前端网页向服务器发送 POST 请求时,DevTools 控制台都会抛出以下错误:

从源“http://127.0.0.1:5500”获取“http://127.0.0.1:5000/CreateBooking”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

这是我的Program.cs

using Microsoft.AspNetCore.HttpOverrides;

var builder = WebApplication.CreateBuilder(args);


builder.Services.AddControllers().AddNewtonsoftJson();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(
        builder =>
        {
            builder.WithOrigins("http://127.0.0.1:5500")
            .AllowAnyHeader().AllowAnyMethod();
        }
        );
});
builder.WebHost.UseUrls("http://*:5000");
var app = builder.Build();

app.UseCors();

app.UseStaticFiles();


app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor |
    ForwardedHeaders.XForwardedProto
});

app.UseAuthorization();

app.MapControllers();

app.Run();

要发布请求,我只需使用带有标头的 fetch:

"Content-Type": "application/json"

我尝试过使用通配符来源:

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(
        builder =>
        {
            builder.WithOrigins("*")
            .AllowAnyHeader().AllowAnyMethod();
        }
        );
});

但是,我仍然遇到同样的错误。我想知道我的构建者是否没有应用该策略,或者我设置策略的方式是否存在本质上的错误。任何帮助将不胜感激,因为这是我的第一个成熟的应用程序。

c# asp.net-core asp.net-core-mvc cors asp.net-core-middleware
1个回答
2
投票

来自 CORS 以及命名策略和中间件

使用端点路由,必须将 CORS 中间件配置为在对 UseRouting 和 UseEndpoints 的调用之间执行。

同样基于

app.UseForwardedHeaders()
,你的中间件管道(结构)应该是:

var app = builder.Build();

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor |
    ForwardedHeaders.XForwardedProto
});


app.UseStaticFiles();

app.UseRouting();

app.UseCors();

app.UseAuthorization();

app.MapControllers();

app.Run();
© www.soinside.com 2019 - 2024. All rights reserved.