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

UWP应用中C# Dns.GetHostAddresses()解析带协议主机名失败求助

解决UWP应用中DNS解析带URL前缀失败的问题

问题根源

System.Net.Dns.GetHostAddresses()是用来解析纯主机名的(比如www.example.com),不是带协议前缀的完整URL(比如https://www.example.com)。当你把带https://的完整URL传进去时,它会把整个字符串当作主机名去查询,自然找不到对应的IP记录,所以抛出SocketException。

解决方案

这里有两种实用的解决方式,更推荐第二种,因为更贴合你最终发起请求的需求:

1. 从URL中提取主机名再解析

用Uri类拆分URL,提取出纯主机名后再交给DNS解析:

string targetUrl = "https://www.example.com";
Uri uri = new Uri(targetUrl);
// 提取出纯主机名:www.example.com
string hostName = uri.Host;

IPAddress[] ipAddresses = System.Net.Dns.GetHostAddresses(hostName);
// 此时ipAddresses[0]会返回你hosts里配置的192.168.1.187

2. 直接用HttpClient发起请求(推荐)

如果你最终目的是向https://www.example.com发起请求,完全不需要手动做DNS解析。HttpClient会自动拆分URL中的协议、主机名部分,并且会遵守hosts文件的映射规则,直接用完整URL发起请求即可:

using (HttpClient client = new HttpClient())
{
    try
    {
        HttpResponseMessage response = await client.GetAsync("https://www.example.com");
        response.EnsureSuccessStatusCode(); // 确保请求返回成功状态码
        string responseContent = await response.Content.ReadAsStringAsync();
        // 在这里处理返回的响应内容
    }
    catch (HttpRequestException ex)
    {
        // 处理请求异常,比如网络问题、SSL证书错误等
        Debug.WriteLine($"请求失败: {ex.Message}");
    }
}

补充说明

  • 浏览器能正常加载是因为它会自动处理URL的拆分,只把主机名传给DNS解析,所以能命中hosts的映射。
  • UWP应用使用HttpClient时,记得在Package.appxmanifest中配置对应的网络权限(比如Internet (Client)),否则会出现请求权限不足的问题。

内容的提问来源于stack exchange,提问作者Shashi kumar S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:11:02