You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

替换app.MapControllers为UseEndpoints后ASP.NET Core Web API的CORS问题

解决非托管Blazor WASM与使用UseEndpoints的ASP.NET Core API的CORS问题

问题根源

替换app.MapControllers()为app.UseEndpoints(...)后CORS失效,核心原因是中间件顺序错误,或是未确保CORS策略被绑定到路由端点上。在.NET 6的极简模式中,MapControllers()会自动处理路由与中间件的关联,但手动使用UseEndpoints时需要严格遵循中间件执行顺序。

解决方案

1. 确保CORS中间件的正确顺序

在Program.cs中,UseCors必须放在UseRouting之后、UseEndpoints之前,且在UseAuthorization等认证中间件之前。示例配置如下:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务
builder.Services.AddControllers();

// 配置CORS策略
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowBlazorOrigin",
        policy => policy.WithOrigins("https://localhost:7041")
                        .AllowAnyMethod()
                        .AllowAnyHeader());
});

var app = builder.Build();

app.UseHttpsRedirection();

// 必须先启用路由匹配
app.UseRouting();

// 启用CORS,应用指定策略
app.UseCors("AllowBlazorOrigin");

// 认证/授权中间件(如果有)
app.UseAuthorization();

// 配置端点路由
app.UseEndpoints(endpoints =>
{
    endpoints.MapDefaultControllerRoute();
});

app.Run();

2. (可选)针对端点显式绑定CORS策略

如果需要更精细的控制,可以直接在路由端点上绑定CORS策略,确保该端点强制应用规则:

app.UseEndpoints(endpoints =>
{
    endpoints.MapDefaultControllerRoute()
             .RequireCors("AllowBlazorOrigin"); // 显式要求使用指定CORS策略
});

补充说明

  • 托管模式下无CORS问题的原因:Blazor WASM与API共享同一主机进程,请求属于同源请求,浏览器不会触发CORS校验。
  • 验证CORS策略是否生效:可以通过浏览器开发者工具的网络面板查看请求响应头,确认Access-Control-Allow-Origin是否包含https://localhost:7041。

内容的提问来源于stack exchange,提问作者GoupilSystem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:55:16