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

Xamarin迁移至.NET8后HttpClient明文通信启用失败求助

.NET8 Android迁移后CLEARTEXT通信错误解决思路

问题场景

将Xamarin/C#应用迁移至.NET8后,调用var response = await httpClient.GetAsync(resource);时触发错误:

CLEARTEXT communication not enabled for client

已完成的配置:

  • AndroidManifest.xml中已添加android:usesCleartextTraffic="true"和android:networkSecurityConfig="@xml/network_security_config"
  • 网络安全配置文件network_security_config.xml设置了<base-config cleartextTrafficPermitted="true"/>
  • 已声明INTERNET权限
  • 原Xamarin环境下运行正常,迁移至.NET8后出现报错

解决步骤

1. 检查资源文件路径与命名

确认network_security_config.xml放置在.NET8 Android项目的Resources/xml目录下(注意目录名需为小写的xml),文件名与Manifest中的引用完全一致,无拼写错误。

2. 验证最终合并的Manifest配置

.NET8 Android会自动合并来自NuGet包、依赖库的Manifest配置,可能覆盖你的设置。打开项目obj\Debug\net8.0-android\AndroidManifest.xml,查看最终合并后的<application>标签,确认android:usesCleartextTraffic="true"是否存在且未被覆盖。

3. 针对特定域名配置CLEARTEXT(推荐)

避免全局开启CLEARTEXT,改为针对目标HTTP域名单独配置,减少冲突概率:

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">你的目标域名.com</domain>
    </domain-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>

4. 显式指定HttpClient的Handler

.NET8 Android中HttpClient默认使用AndroidMessageHandler,尝试显式创建并配置Handler:

var handler = new AndroidMessageHandler();
handler.AllowAutoRedirect = true;
using var httpClient = new HttpClient(handler);
var response = await httpClient.GetAsync(resource);

5. 排查targetSdkVersion限制

targetSdkVersion 30+对CLEARTEXT通信限制更严格,检查网络安全配置文件是否存在语法错误(如标签未闭合、属性拼写错误),可借助Android Studio的Manifest验证工具排查。

6. 清理重建项目

执行Build -> Clean Solution,手动删除项目的bin和obj目录,再重新构建,避免缓存的旧配置干扰。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:13:26