Xamarin.Android如何实现仅允许HTTPS连接 禁止HTTP明文请求
Xamarin.Android 禁用所有HTTP明文连接解决方案
1. 补全系统级网络限制配置
android:usesCleartextTraffic="false"仅对Android 9.0(API 28)及以上系统生效,如需兼容更低版本,需新增网络安全配置:
- 在
Resources/xml目录下新建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="false" /> </network-security-config>
- 在
AndroidManifest.xml的application节点关联该配置,同时确认usesCleartextTraffic属性添加在正确节点:
<application android:usesCleartextTraffic="false" android:networkSecurityConfig="@xml/network_security_config" ...> <!-- 其他应用配置 --> </application>
2. 修正HttpClient实现配置
系统级明文限制仅对Android原生网络栈生效,需确认项目的HttpClient配置正确:
- 右键Android项目 → 选择「属性」→ 找到「Android选项」→ 点击「高级」
- HttpClient实现选择
Android,SSL/TLS实现选择Native TLS 1.2+
如果选择托管HttpClient实现,网络请求走.NET堆栈,会绕过Android系统的明文流量限制
3. WebView场景额外拦截
系统网络限制默认不作用于WebView组件,需单独配置拦截逻辑:
- 禁用WebView混合内容加载:
yourWebView.Settings.MixedContentMode = MixedContentHandling.NeverAllow;
- 自定义WebViewClient,拦截所有HTTP请求:
public class NoHttpWebViewClient : WebViewClient { public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request) { if (request.Url.Scheme.Equals("http", StringComparison.OrdinalIgnoreCase)) { // 拦截HTTP请求,可自行替换为错误提示页的返回内容 return new WebResourceResponse(null, null, null); } return base.ShouldInterceptRequest(view, request); } } // 绑定到你的WebView yourWebView.SetWebViewClient(new NoHttpWebViewClient());
4. 第三方网络库兜底校验
如果应用引入了第三方网络库,建议在全局请求入口统一添加Scheme校验逻辑,检测到HTTP请求直接终止,避免第三方库绕过系统限制。
内容的提问来源于stack exchange,提问作者Tazi
相关产品推荐
相关产品推荐

