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

.NET 8 MAUI应用Android端GraphQLHttpClient连接失败,Windows端正常

问题核心原因

Windows环境下的localhost指向开发机本身,但Android设备(模拟器或真机)里的localhost是设备自身的回环地址,导致请求根本没发送到你的开发机后端服务器,这就是服务器日志没收到请求的原因。

解决方案

1. 替换localhost为开发机局域网IP

  • 打开Windows命令提示符,输入ipconfig,找到当前网络(WLAN/以太网)的IPv4地址(比如192.168.1.100)
  • 把代码中的Url变量值从https://localhost:5001替换为https://[你的局域网IP]:5001
  • 同时确保后端Kestrel允许局域网访问,在Program.cs中添加配置:
    builder.WebHost.UseUrls("https://0.0.0.0:5001");
    

2. Android模拟器专用映射地址

如果使用Android Studio自带的模拟器,可以直接用10.0.2.2代替localhost,这个地址是模拟器官方提供的、映射到宿主开发机的回环地址,把Url改成https://10.0.2.2:5001即可。

3. 端口转发(可选)

通过adb命令建立设备到开发机的端口转发:

adb reverse tcp:5001 tcp:5001

执行后,Android设备访问localhost:5001就会转发到开发机的5001端口。

4. 处理HTTPS证书信任问题

.NET 8对HTTPS证书的验证更严格,Android默认不信任开发环境的自签名证书,可能导致连接失败:

  • 调试阶段可以临时改用HTTP:修改后端启用HTTP端口(比如5000),Url改成http://[局域网IP]:5000
  • 生产或需要HTTPS时,将开发机的HTTPS证书导出为.crt格式,放到Android项目的Resources/raw目录,然后在代码中配置信任该证书。
代码修改示例
// 替换为你的开发机局域网IP
private const string Url = "https://192.168.1.100:5001";

private static async Task<(RootObject obj, string rtnMsg)> GetDocumentAsync(string iQuery)
{
    RootObject obj = null;
    string rtnMsg = "";
    var graphQLOptions = new GraphQLHttpClientOptions
    {
        EndPoint = new Uri($"{Url}/graphql", UriKind.Absolute)
    };

    var graphQLHttpClient = new GraphQLHttpClient(graphQLOptions, new NewtonsoftJsonSerializer());

    var documentRequest = new GraphQLRequest { Query = iQuery };

    try
    {
        var graphQLResponse = await graphQLHttpClient.SendQueryAsync<RootObject>(documentRequest);
        Debug.Print("");
        return (graphQLResponse.Data,"");
    }
    catch (Exception ex)
    {
        rtnMsg = ex.Message + " [ErpPart.GetDocumentAsync]";
        Debug.Print(ex.Message);
        return (obj,rtnMsg);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:43:31