我有一个用 C# 编写的 ASP.NET Core Web API,启用了 CORS。
我正在另一台服务器上用react/javascript开发前端,并使用fetch调用Web API。
通过以下
POST
请求,我收到错误:
fetch('http://servername:8082/api/company/createedit', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(formData)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
错误:
从源“http://localhost:5173”获取“http://servername:8082/api/company/createedit”的访问已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头存在于所请求的资源上。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。
但是通过以下
GET
请求,我获取了数据并且没有 CORS 错误:
fetch('http://servername:8082/api/company/getall')
.then((response)=> response.json())
.then((data) => {
setRequests(data.value);
console.log(data);
});
这就是我在 API 中启用 CORS 的方法 - 我错在哪里?
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// CORS
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAnyOrigin", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
// CORS
app.UseCors("AllowAnyOrigin");
app.UseAuthorization();
app.MapControllers();
app.Run();
您可以尝试将以下代码片段添加到 .NET Core 后端的
Startup.cs
/Program.cs
(取决于您使用的版本):
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigins", builder =>
{
builder.WithOrigins("http://your-frontend-origin.com")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials(); // Only if using cookies/auth tokens
});
});
app.UseCors("AllowSpecificOrigins");
希望这有帮助!