C#开发UWP应用执行HTTP GET请求报错但浏览器可正常访问对应地址
UWP应用特定设备HTTP请求失败解决方案
- 检查UWP应用清单权限
必须确保Package.appxmanifest里已勾选 Internet(客户端) 权限,如果你的服务涉及本地内网部署,还要额外勾选 专用网络(客户端和服务器) 权限,部分设备的系统安全策略会对未声明权限的应用静默拦截外网请求,哪怕浏览器能正常访问。 - 适配TLS版本
你当前的代码没有显式指定TLS版本,部分旧版Windows10设备的默认TLS版本可能低于后端Azure服务要求的TLS1.2,在实例化HttpClient之前加一行代码强制指定TLS版本,该代码仅需执行一次即可:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
- 替换UWP原生HttpClient实现
UWP平台更推荐使用原生的Windows.Web.Http.HttpClient而非System.Net.Http.HttpClient,前者对UWP的网络隔离机制、系统代理适配更好,不会出现部分设备上莫名其妙的请求拦截问题,示例代码如下:
using Windows.Web.Http; string pingUrl = "https://ltbackend.azurewebsites.net/diagnostic/ping"; HttpClient httpClient = new HttpClient(); try { HttpResponseMessage response = await httpClient.GetAsync(new Uri(pingUrl)); response.EnsureSuccessStatusCode(); string stringRes = await response.Content.ReadAsStringAsync(); HttpStatusCode respCode = response.StatusCode; // 后续业务逻辑 } catch (Exception ex) { // 异常处理逻辑 }
- 排查UWP网络隔离规则
部分设备如果开启了企业级网络策略,会将UWP应用加入网络隔离列表,你可以让出现问题的用户以管理员身份运行PowerShell,执行以下命令排查:CheckNetIsolation.exe LoopbackExempt -s
如果你的应用不在豁免列表里,执行以下命令添加(替换<你的应用包家族名称>为实际值,可在应用清单的打包页面查看):CheckNetIsolation.exe LoopbackExempt -a -n="<你的应用包家族名称>"
该操作临时生效,重新安装应用需要重新执行,如果要批量处理可以在应用首次启动时请求用户权限执行该命令。 - 补全请求头配置
部分云服务会拦截缺失User-Agent请求头的请求,你可以在发送请求前手动给请求对象加UA头,模拟普通浏览器的UA即可。
内容的提问来源于stack exchange,提问作者Cristiano Ghersi
相关产品推荐
相关产品推荐

