我创建了一个网页,该网页从我使用 .NET Framework 8.0 在 C# 中构建的 .NET Core Web API 获取数据。我的网页和 api 托管在同一台服务器上,只是端口不同。当我尝试调用 api 时,控制台会输出以下错误:
从源“网页地址”获取“api 地址”的访问已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
我纠正问题的第一步是查找 Microsoft 的文档 在 ASP.NET Core 中启用跨源请求。我滚动到 CORS with defaultpolicy and middleware 部分,并更改了 Program.cs 中的代码,如下所示:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>
{
policy.WithOrigins("Webpage Address", "API Address")
.AllowAnyMethod()
.AllowAnyHeader();
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseCors();
app.UseAuthorization();
app.MapControllers();
app.Run();
我仍然收到此代码的 CORS 错误,因此我尝试了以下更改,但仍然导致错误:
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>
{
policy.AllowAnyOrigins()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
我还尝试根据“具有命名策略和中间件的 CORS”部分配置我的代码,但结果与上面概述的结果相同。有人可以帮忙吗?
builder.Services.AddCors(options => options.AddPolicy(
"AllowAll",
p => p.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()));
// ... more code
app.UseCors("AllowAll");
app.UseCors(cors => cors.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
看看是否有效,请告诉我们!