CORS 从本地主机访问 Azure 中托管的 ASP.NET Core 8 Web API 失败

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

我有一个托管在 Azure 中的 ASP.NET Core 8.0 Web API。当所有内容都部署到 Azure 时,它可以正常工作。但我们正在尝试在本地运行 Reactjs 前端并访问 Azure 中的 Web API 进行测试和调试。我已遵循有关在 Web 服务上设置 CORS 的所有文档,但不断收到:

从源“http://localhost:3000”获取“https:///api/stats”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:无“访问控制” -Allow-Origin'标头存在于请求的资源上。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

builder.Services.AddCors(options =>
    {
        options.AddPolicy(MyAllowSpecificOrigins,
            policy => {
                     policy.WithOrigins("http://localhost:3000")
                           .AllowAnyHeader()
                           .AllowAnyMethod()
                           .AllowCredentials();
                  });
    });

builder.Services
       .AddControllers()
       .AddJsonOptions(x =>
            {
                x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
                x.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
            });

然后,稍后,在执行 var app = builder.Build() 之后

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseRouting();

app.UseCors(MyAllowSpecificOrigins);
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers()
             .RequireCors(MyAllowSpecificOrigins);
});

app.UseSpa(spa =>
{
    if (builder.Environment.IsDevelopment())
    {
        spa.Options.SourcePath = "client-app";
        spa.UseReactDevelopmentServer("start");
    }
});

我什至尝试将

[EnableCors(MyAllowSpecificOrigins)]
添加到控制器本身。

这是一个非营利组织的开源项目。希望有人知道解决办法。有什么想法吗?

这是

Program.cs
的全部内容:

https://github.com/TrashMob-eco/TrashMob/blob/main/TrashMob/Program.cs

我尝试过改变陈述的顺序,尝试过旧的方法和新的搜索方法,尝试打开所有的起源。似乎没什么作用。

reactjs asp.net-core cors asp.net-core-webapi
1个回答
0
投票

该网站托管在 Azure Web 应用程序中,在 Web 应用程序设置中的“API”子菜单下,有一个名为 CORS 的条目。我在那里添加了一条记录 http://localhost:3000 并且一切正常。

API Menu on Azure Portal

Adding a record to the CORS settings in the Portal

© www.soinside.com 2019 - 2024. All rights reserved.