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

如何让连接Mac的iPhone访问Windows本地Web API(Blazor Hybrid)

解决Blazor Hybrid iOS真机无法访问Windows本地API的问题

核心问题分析

你的场景是:Windows上运行API服务,Mac通过Visual Studio配对连接Windows,iPhone连接Mac测试Blazor Hybrid应用。安卓真机/模拟器能正常调用API,但iOS设备无法命中请求,核心问题在于网络地址配置错误、SSL证书信任逻辑不匹配,以及可能的局域网连通性障碍。

分步解决方案

1. 修正API的网络绑定配置

你的API目前仅绑定了HTTP协议的局域网IP,但代码中使用的是HTTPS请求,需要确保API同时绑定HTTPS的局域网地址:

修改launchSettings.json中EventApplicationAPI的配置,添加HTTPS协议的局域网IP(替换10.100.0.152为你的Windows实际局域网IP):

"applicationUrl": "http://localhost:7128;http://10.100.0.152:7128;https://localhost:7128;https://10.100.0.152:7128",

同时确保API的开发SSL证书已被信任,执行以下命令:

dotnet dev-certs https --trust

2. 修正iOS端的HttpClient BaseAddress

iOS设备无法通过localhost访问Windows的API服务,必须指定Windows的实际局域网IP,修改MauiProgram.cs中的地址逻辑:

private static HttpClient BuildHttpClient()
{
    string windowsLanIp = "10.100.0.152"; // 替换为你的Windows局域网IP
    string url = DeviceInfo.Platform switch
    {
        DevicePlatform.Android => $"https://10.0.2.2:7128",
        DevicePlatform.iOS => $"https://{windowsLanIp}:7128",
        _ => "https://localhost:7128"
    };

#if DEBUG
    HttpsClientHandlerService handler = new HttpsClientHandlerService();
    HttpClient client = new HttpClient(handler.GetPlatformMessageHandler()) { BaseAddress = new Uri(url) };
#else
    HttpClient client = new HttpClient { BaseAddress = new Uri(url) };
#endif
    return client;
}

3. 优化iOS的SSL证书信任逻辑

当前你的iOS信任逻辑直接返回true,虽然能绕过验证,但建议精准匹配目标地址,避免不必要的安全风险:

#if IOS
public bool IsHttpsLocalhost(NSUrlSessionHandler sender, string url, Security.SecTrust trust)
{
    string windowsLanIp = "10.100.0.152"; // 替换为你的Windows局域网IP
    return url.StartsWith($"https://localhost") || url.StartsWith($"https://{windowsLanIp}:7128");
}
#endif

4. 排查网络连通性

  • 确保iPhone和Windows处于同一局域网:如果iPhone连接的是Mac热点,需开启Mac的Internet共享,让Windows和iPhone处于同一子网
  • 在iPhone的Safari中直接访问https://10.100.0.152:7128/swagger,确认能打开API文档:如果打不开,检查Windows防火墙是否开放7128端口,或API服务是否正常启动
  • 确认Mac的Visual Studio配对连接正常,没有拦截跨设备网络请求

关于ngrok的补充排查(若之前使用失败)

如果使用ngrok仍无法访问,需确认:

  • ngrok转发的是API的HTTPS端口(而非HTTP)
  • iOS端请求地址为ngrok提供的HTTPS域名(而非IP)
  • ngrok隧道正常运行,未被本地防火墙拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:50:21