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

Flutter Web调用.NET后端接口报XMLHttpRequest错误如何解决

问题排查方案

你遇到的两个报错翻译如下:

  • ERR_CERT_AUTHORITY_INVALID:证书颁发机构无效
  • Uncaught (in promise) Error: XMLHttpRequest error.:未捕获(Promise异步流程中)错误:XMLHttpRequest请求异常

Postman、Swagger可正常调用的原因是这类接口调试工具默认会跳过自签名证书校验、对CORS规则没有强制校验,而Flutter Web运行在浏览器环境中,浏览器对证书、跨域规则的校验是强制开启的,所以会触发报错。


1. 优先处理证书错误

  • 确认.NET后端是否开启了HTTPS自动重定向:ASP.NET Core默认会将HTTP请求重定向到HTTPS端口,你代码中请求的是HTTP地址http://localhost:5000,若开启了重定向会跳转至HTTPS地址,而本地开发用的ASP.NET Core证书是自签名证书,浏览器默认不信任,就会触发证书无效报错。
    • 临时修复方案1:本地调试时暂时关闭.NET后端的HTTPS重定向,注释掉Program.cs中的app.UseHttpsRedirection()代码即可。
    • 临时修复方案2:手动在浏览器中访问你的.NET后端HTTPS地址,点击页面的「高级」→「继续前往」,将自签名证书加入当前浏览器的信任列表后再发起请求。

2. 修正CORS配置遗漏项

你发送的是Content-Type: application/json的POST请求,属于浏览器定义的复杂请求,会先发送OPTIONS预请求校验CORS规则,很多开发者配置CORS时会遗漏对OPTIONS请求的处理:

  • .NET端CORS配置必须严格注意中间件顺序,且明确允许对应请求源、请求方法,参考配置如下(Program.cs):
// 服务注册阶段
builder.Services.AddCors(options =>
{
    options.AddPolicy("DebugCors", policy =>
    {
        // 此处必须填写你Flutter Web实际运行的完整地址(含端口,不要用*通配符)
        policy.WithOrigins("http://localhost:xxxx") 
              .AllowAnyHeader()
              .AllowAnyMethod() // 包含OPTIONS请求的许可
              .AllowCredentials(); // 若需要传递认证信息、Cookie需添加该配置
    });
});

// 中间件注册阶段,顺序不能调整
app.UseRouting();
app.UseCors("DebugCors"); // 必须放在UseRouting之后、UseAuthorization之前
app.UseAuthorization();

3. 本地调试临时跳过浏览器安全限制

仅用于本地开发调试,生产环境不可使用:启动Flutter Web时添加浏览器参数跳过证书、跨域校验:
flutter run -d chrome --web-browser-flag "--disable-web-security" --web-browser-flag "--ignore-certificate-errors"

4. 校验地址匹配规则

确认Flutter Web的运行地址(协议、域名、端口)与CORS配置中允许的源完全匹配,例如Flutter跑在http://127.0.0.1:5500,但CORS配置的是http://localhost:5500,浏览器会判定为跨域不通过。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:45:03