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

VS2019开发安卓应用Release模式调用WebAPI返回状态码0如何解决

返回状态码0通常代表请求未成功发送到服务端,被客户端系统层面拦截,可按以下顺序排查解决:

问题解决方案

1. 配置允许明文HTTP请求

安卓9(API Level 28)及以上版本默认禁止应用发起明文HTTP请求,Debug模式下部分开发模板会默认开启android:usesCleartextTraffic权限,Release模式下该配置会被重置为默认值false,导致请求直接被系统拦截。
解决方法:
打开AndroidManifest.xml文件,在application节点添加属性:

<application android:usesCleartextTraffic="true">
<!-- 其余原有配置保持不变 -->
</application>

2. 检查网络权限配置

部分Xamarin.Android项目模板会在Debug模式下自动授予INTERNET权限,Release模式需要手动显式声明权限:
同样在AndroidManifest.xml的根节点下添加权限声明:

<uses-permission android:name="android.permission.INTERNET" />

3. 配置链接器跳过相关程序集裁剪

Release模式默认会开启托管代码链接器裁剪,移除未被显式引用的类和成员,可能会裁剪掉RestSharp以及System.Net.Http相关的依赖代码,导致请求执行异常。
解决方法:
右键安卓项目 -> 属性 -> 安卓选项 -> 链接器,配置链接行为为「仅裁剪SDK程序集」,如果还是有问题,可以添加跳过裁剪的程序集配置,将RestSharp和System.Net.Http添加到跳过裁剪列表。
也可以直接在项目文件中添加配置:

<AndroidLinkSkip>RestSharp;System.Net.Http</AndroidLinkSkip>

4. 调整RestSharp调用写法

你当前使用的是RestSharp旧版同步Execute方法,安卓高版本不允许在主线程执行同步网络请求,Debug模式下可能默认禁用了主线程网络检查,Release模式下该检查生效会导致请求被终止。
可以改成异步调用写法:

public static async Task<string> FetchDB()
{
    try
    {
        var client = new RestClient("http://192.168.2.200:8008/ecmiddleware/middleware/getstats");
        client.Timeout = -1;
        var request = new RestRequest(Method.POST);                
        IRestResponse response = await client.ExecuteAsync(request);
        if (response.StatusCode == System.Net.HttpStatusCode.OK)
            return response.Content;
        else
            return $"Not found \n{client.BaseUrl.AbsoluteUri}\n{DateTime.Now}\n{response.StatusCode}:{response.StatusDescription}";
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}

调用该方法时注意用await异步等待,不要阻塞主线程。

5. 调整TLS配置

右键安卓项目 -> 属性 -> 安卓选项 -> 高级,将「SSL/TLS实现」设置为「Native TLS 1.2+」,避免因为协议版本不兼容导致请求失败。

内容的提问来源于stack exchange,提问作者S.ATTA.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:42:00