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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 03:06:00