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

如何解决Flutter调用ASP.NET Core API报CERTIFICATE_VERIFY_FAILED证书错误

Flutter调用ASP.NET Core API CERTIFICATE_VERIFY_FAILED 报错解决方案

以下是按优先级排序的可落地解决方案:

  • 第一,排查HttpOverrides配置是否生效
    绝大多数配置后不生效的原因是配置位置错误,必须将全局覆现代码放在main()函数的runApp()执行之前,正确配置示例如下:

    import 'dart:io';
    import 'package:flutter/material.dart';
    
    class DevHttpOverrides extends HttpOverrides {
      @override
      HttpClient createHttpClient(SecurityContext? context) {
        return super.createHttpClient(context)
          ..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
      }
    }
    
    void main() {
      // 必须放在runApp之前执行
      HttpOverrides.global = DevHttpOverrides();
      runApp(const MyApp());
    }
    

    注意该配置仅对系统默认HttpClient生效,如果你使用第三方HTTP请求库需要单独配置。

  • 第二,第三方请求库单独配置证书忽略
    如果你使用dio库发起请求,默认不会读取全局HttpOverrides配置,需要单独为dio实例设置证书校验规则:

    import 'package:dio/dio.dart';
    import 'package:dio/io.dart';
    import 'package:flutter/foundation.dart';
    
    Dio createDio() {
      final dio = Dio();
      // 开发环境忽略证书校验
      if (kDebugMode) {
        (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
          client.badCertificateCallback = (cert, host, port) => true;
          return client;
        };
      }
      return dio;
    }
    

    所有请求都要使用经过上述配置的dio实例发起,否则配置不生效。

  • 第三,安卓端额外网络配置
    安卓9及以上系统默认限制未信任的自签名证书和HTTP请求,需要额外添加网络安全配置:

    1. 在android/app/src/main/res/目录下新建xml文件夹,创建network_security_config.xml文件,写入以下内容:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" />
                <certificates src="user" />
            </trust-anchors>
        </base-config>
        <!-- 替换为你实际的API域名/IP,不需要带端口和http/https前缀 -->
        <domain includeSubdomains="true">192.168.1.2</domain>
        <domain includeSubdomains="true">your-api-domain.com</domain>
    </network-security-config>
    
    1. 打开android/app/src/main/AndroidManifest.xml,在application标签中添加两个属性:
    <application
        android:networkSecurityConfig="@xml/network_security_config"
        android:usesCleartextTraffic="true"
        <!-- 其余原有配置保持不变 -->
    >
    
  • 第四,本地调试特殊适配
    如果你使用安卓模拟器访问宿主机上的ASP.NET Core服务,不能直接用localhost,要替换为模拟器内置的宿主机映射地址10.0.2.2,比如原API地址是https://localhost:7045/api/register,模拟器里要改成https://10.0.2.2:7045/api/register。
    也可以在本地开发阶段暂时将ASP.NET Core改为HTTP协议监听,直接请求HTTP地址规避证书问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:06:03