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

Blazor直连API遭CORS拦截问题求助

问题

我搭建了包含Blazor WebAssembly和API项目的Aspire解决方案:

  • API运行地址:https://localhost:7476
  • Blazor(InteractiveServer模式)部署地址:https://localhost:7077

平时通过MapPost/MapGet注册的API都通过内部SignalR连接调用,运行正常。但用RadzenUpload组件直接调用https://localhost:7476/api/upload上传文件时,浏览器报CORS错误:

Access to XMLHttpRequest at 'https://localhost:7476/api/upload' from origin 'https://localhost:7077' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我已经在API和Blazor的Program.cs中添加了以下CORS配置,但问题依旧:

builder.Services.AddCors(o => o.AddPolicy("AllowAll", builder =>
{
    builder.AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader();
}));

...

var app = builder.Build();

app.UseCors("AllowAll");
解决方案

1. 调整API项目的CORS中间件顺序

CORS中间件的位置至关重要,必须放在UseRouting之后、UseAuthorization之前,否则OPTIONS预请求会被授权逻辑拦截,无法触发CORS策略。修改API的Program.cs:

var builder = WebApplication.CreateBuilder(args);

// 注册CORS策略
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowBlazorUpload", policy =>
    {
        // 指定Blazor的具体源,避免和AllowCredentials冲突
        policy.WithOrigins("https://localhost:7077")
              .AllowAnyMethod()
              .AllowAnyHeader()
              .AllowCredentials(); // 如果上传需要携带身份凭证(如Cookie、JWT)
    });
});

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

var app = builder.Build();

// 中间件顺序:先路由,再CORS,最后授权
app.UseRouting();

// 启用CORS策略
app.UseCors("AllowBlazorUpload");

app.UseAuthorization();

// 映射API控制器
app.MapControllers();

app.Run();

2. 移除Blazor项目中的CORS配置

Blazor InteractiveServer模式下,客户端是通过SignalR与服务器通信,直接调用API的是浏览器本身,因此Blazor项目不需要配置CORS,只需要在API端配置即可,多余的配置反而可能导致混淆。

3. 验证关键点

  • 确保WithOrigins中的地址与Blazor的实际部署地址完全一致(包括协议、域名、端口)
  • 如果不需要身份凭证,可以去掉.AllowCredentials(),此时也可继续使用AllowAnyOrigin()(但指定具体源更安全合规)
  • 清除浏览器缓存,避免旧的CORS响应缓存影响测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:42:08