对 AspNet.core api 的 Javascript POST 请求已被 CORS 策略阻止(但不是 GET 请求)

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

我在 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();
asp.net asp.net-core cors
2个回答
0
投票

您可以尝试将以下代码片段添加到 .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");

希望这有帮助!


0
投票

试试这个

app.UseCors("AllowSpecificOrigin");
© www.soinside.com 2019 - 2024. All rights reserved.