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

.NET 8 Blazor WASM部署Ubuntu后CORS请求失败求助

解决Blazor WASM部署到Ubuntu后CORS请求失败问题

针对你遇到的跨源请求被阻止、服务端无日志的问题,按以下步骤排查解决:

1. 检查.NET中间件顺序是否正确

CORS中间件的位置直接决定策略是否生效,必须放在UseRouting之后、UseAuthorization/UseEndpoints之前。调整Program.cs的中间件管道:

app.UseRouting();
app.UseCors("AllowAll"); // 关键:位置不能错
app.UseAuthorization();

app.MapControllers();

2. 确认API服务是否监听外部请求

本地运行时dotnet run默认绑定localhost,但Ubuntu服务器上需要让API监听所有网卡,否则外部客户端浏览器无法访问:

  • 启动API时指定绑定地址:
    dotnet Server.dll --urls=http://0.0.0.0:5000
    
  • 或者在Program.cs中固化配置:
    builder.WebHost.UseUrls("http://0.0.0.0:5000");
    

如果API只绑定localhost,浏览器的OPTIONS请求根本无法到达服务端,就会出现你看到的状态码null的错误。

3. 启用CORS日志排查请求是否到达服务端

修改API的appsettings.json,开启CORS相关调试日志,确认请求是否被服务端接收:

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning",
    "Microsoft.AspNetCore.Cors": "Debug"
  }
}

重启服务后测试,查看日志中是否有CORS策略的执行记录。如果还是没有日志,说明请求没到达API,回到步骤2确认绑定地址。

4. 改用Nginx反向代理彻底避免跨域

既然前端用Nginx托管,最佳实践是通过反向代理将API请求转发到后端,让前端和API同源,彻底消除CORS问题:
修改Nginx配置,新增API代理规则:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html;
        server_name _;

        location / {
                root /var/www/html;
                try_files $uri $uri/ /index.html;
        }

        # 新增API反向代理
        location /api {
                proxy_pass http://localhost:5000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /_framework { root /var/www/html; }
        location /css { root /var/www/html; }
        location /js { root /var/www/html; }
}

然后修改Blazor客户端的HttpClient配置,使用相对路径:

// 空字符串表示和前端同源,直接用/api开头的相对路径
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("") });

重启Nginx后测试,跨域问题会直接消失。

5. 排除浏览器缓存干扰

Firefox可能缓存了之前的跨域错误状态,尝试用隐私窗口测试,或者清除浏览器缓存(Ctrl+Shift+Delete)后再验证。

内容的提问来源于stack exchange,提问作者r-kane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:34:52