每当我从我制作的前端网页向服务器发送 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();
}
);
});
但是,我仍然遇到同样的错误。我想知道我的构建者是否没有应用该策略,或者我设置策略的方式是否存在本质上的错误。任何帮助将不胜感激,因为这是我的第一个成熟的应用程序。
来自 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();