.NET Core API发布后MAUI安卓应用API调用失败求助
问题原因及解决方案
核心原因
Debug模式下你用了自定义的HttpsClientHandlerService,大概率是绕过了SSL证书验证;而Release模式用默认HttpClient,安卓系统会严格校验服务器SSL证书,若证书不被安卓信任(比如自签名证书、证书域名不匹配、证书链不完整),就会拦截API请求。另外也可能存在安卓网络安全配置未放行目标域名的情况。
具体解决方案
1. 处理SSL证书信任问题
情况A:使用合法CA签发的证书
确保API服务器证书是正规CA签发,且域名与证书绑定一致、证书链完整。这种情况下,只需统一Release和Debug模式的HttpClient配置,使用平台适配的消息处理器:
var loginData = new { Username = username, Password = password }; HttpsClientHandlerService handler = new HttpsClientHandlerService(); HttpClient client = new HttpClient(handler.GetPlatformMessageHandler()); client.BaseAddress = new Uri("https://apps.example.com:93/HRA_API1"); var response = await client.PostAsJsonAsync("api/Auth", loginData);
去掉#if DEBUG分支,避免不同模式下的配置差异。
情况B:使用自签名证书
如果是测试环境用自签名证书,需要在安卓项目中配置信任该证书:
- 将自签名证书(.cer格式)放到安卓项目的
Resources/raw目录 - 在
Resources/xml下创建network_security_config.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">apps.example.com</domain> <trust-anchors> <certificates src="@raw/你的证书文件名" /> <certificates src="system" /> </trust-anchors> </domain-config> </network-security-config>
- 在安卓项目的
AndroidManifest.xml中引用该配置:
<application android:networkSecurityConfig="@xml/network_security_config">
2. 检查安卓网络权限
确保AndroidManifest.xml中添加了必要的网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3. 简化BaseAddress配置
当前代码中安卓和其他平台的BaseAddress一致,可直接简化为统一地址,避免不必要的平台判断:
client.BaseAddress = new Uri("https://apps.example.com:93/HRA_API1");
4. 捕获异常定位具体错误
在代码中添加异常捕获,打印详细错误信息,方便精准排查:
try { var response = await client.PostAsJsonAsync("api/Auth", loginData); response.EnsureSuccessStatusCode(); // 后续业务处理 } catch (Exception ex) { Console.WriteLine($"API调用失败:{ex.Message}\n{ex.StackTrace}"); }
内容的提问来源于stack exchange,提问作者Galaxylokka
相关产品推荐
相关产品推荐

