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地址,点击页面的「高级」→「继续前往」,将自签名证书加入当前浏览器的信任列表后再发起请求。
- 临时修复方案1:本地调试时暂时关闭.NET后端的HTTPS重定向,注释掉Program.cs中的
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
相关产品推荐
相关产品推荐

