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

Xamarin Forms Android应用用RestSharp调用本地Web API遇连接失败

解决Xamarin Forms Android访问Web API时的ConnectFailure (No route to host)错误

看起来你遇到的是Android模拟器无法连接到本地Web API的典型问题,我来帮你一步步排查和解决:

1. 确认Web API的监听配置

首先要确保你的Web API允许外部设备(包括模拟器)访问:

  • 如果是用ASP.NET Core:在Program.cs(旧版本是Startup.cs)里,确保启动时绑定的地址是http://0.0.0.0:51262而不是仅http://localhost:51262。这样API会监听所有网络接口,而不仅仅是主机的本地回环地址。
    // ASP.NET Core 6+ 示例
    var builder = WebApplication.CreateBuilder(args);
    builder.WebHost.UseUrls("http://0.0.0.0:51262");
    
  • 如果是用IIS Express:默认情况下IIS Express只允许本地访问。你需要修改配置文件来允许外部访问:

    找到项目目录下的.vs\config\applicationhost.config,找到你的API站点的<bindings>节点,添加一个绑定到0.0.0.0的条目:

    <binding protocol="http" bindingInformation="*:51262:*" />
    
    然后重启IIS Express和API。

2. 检查Android的网络权限和明文HTTP限制

Android 9(API 28)及以上默认禁用明文HTTP请求,同时你需要确保应用有网络访问权限:

  • 在Android项目的AndroidManifest.xml中添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 如果你的API用的是HTTP而不是HTTPS,需要配置允许明文HTTP:
    在Android项目的Resources/xml目录下创建network_security_config.xml(如果没有就新建),内容如下:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">10.0.2.2</domain>
        </domain-config>
    </network-security-config>
    
    然后在AndroidManifest.xml的<application>标签里引用这个配置:
    <application ... android:networkSecurityConfig="@xml/network_security_config">
    

3. 排查主机防火墙设置

你的Windows防火墙可能阻止了模拟器对51262端口的访问:

  • 打开Windows Defender防火墙,进入“高级设置”。
  • 添加入站规则,允许TCP协议的51262端口的所有连接,或者指定模拟器的IP段(通常是10.0.2.0/24)。

4. 验证连接的基本可用性

可以先在模拟器的浏览器里访问http://10.0.2.2:51262/api/portfolio,看看是否能正常返回数据。如果浏览器也打不开,那问题大概率在API的配置或防火墙,而不是RestSharp的代码。

5. 检查RestSharp的代码细节

最后再确认你的RestSharp代码有没有小问题:

  • 确保RestClient的基地址末尾有斜杠(你已经加了,这点没问题)。
  • 如果你用的是最新版RestSharp,注意它的API有些变化,比如默认请求方法就是GET,也可以直接用泛型的GetAsync简化代码:
    public async Task<List<ETFPortfolio>> GetPortfolios() 
    { 
        var client = new RestClient("http://10.0.2.2:51262/api/"); 
        var request = new RestRequest("portfolio");
        // 按需添加请求头
        request.AddHeader("Accept", "application/json");
        var response = await client.GetAsync<List<ETFPortfolio>>(request);
        return response;
    }
    

按照上面的步骤一步步排查,应该能解决你的连接问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:21