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

如何解决Xamarin调用HttpWebRequest.GetRequestStream时出现ConnectFailure错误

问题根因与解决方案

你遇到的ConnectFailure错误核心触发原因和对应修复方案如下:

1. 地址配置错误

你当前使用http://localhost作为接口地址,Postman在你的开发电脑上运行,访问本地部署的接口自然正常,但Xamarin应用运行在模拟器/真机上时,localhost指向的是运行应用的设备本身,而非你的开发电脑,因此无法建立连接。
修复方式:

  • 安卓模拟器场景:将localhost替换为10.0.2.2,这是安卓模拟器内置的指向开发主机的特殊IP
  • iOS模拟器场景:直接使用开发电脑的本地IP即可,iOS模拟器共享主机网络栈
  • 真机场景:确保真机和开发电脑处于同一局域网,将localhost替换为开发电脑的局域网IP,同时关闭电脑防火墙或放开接口对应端口的访问权限

2. 明文流量限制适配

安卓9及以上、iOS新版本默认禁止HTTP明文流量访问,你当前使用HTTP协议需要额外配置权限:

  • 安卓端:在AndroidManifest.xml的application节点添加属性android:usesCleartextTraffic="true"
  • iOS端:在Info.plist中添加NSAppTransportSecurity配置,开放对应域名的HTTP访问权限

3. 代码优化建议

HttpWebRequest属于已被官方弃用的API,Xamarin平台更推荐使用HttpClient实现网络请求,异步写法更适配Xamarin的UI异步逻辑,参考代码如下:

// 建议将HttpClient声明为静态全局对象,避免重复实例化造成资源浪费
private static readonly HttpClient _httpClient = new HttpClient();

private async void btnbuscar_Clicked(object sender, EventArgs e)
{
    try
    {
        // 替换为调整后的正确接口地址
        string url = "http://10.0.2.2/XXX/XX";
        var postData = new Dictionary<string, string>
        {
            {"desc", txtdesc.Text}
        };
        var content = new FormUrlEncodedContent(postData);
        // 异步发起POST请求
        var response = await _httpClient.PostAsync(url, content);
        if (response.IsSuccessStatusCode)
        {
            string responseText = await response.Content.ReadAsStringAsync();
            var msjdes = JsonConvert.DeserializeObject<List<RootListObject>>(responseText);
            listparts.ItemsSource = msjdes;
        }
        else
        {
            await DisplayAlert("Mensaje", "接口请求失败", "");
        }
    }
    catch (Exception ex)
    {
        await DisplayAlert("Error", ex.Message, "OK");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:09:00