我在 Asp.net core/C# 中有一个启用了 CORS 的 Web api。
我正在另一台服务器上用 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");
希望这有帮助!
试试这个
app.UseCors("AllowSpecificOrigin");