【问题标题】:Using ipv6 address to connect to a server using HttpClient (using ipv6 address to define URI) Fixing - Invalid URI: Invalid port specified)使用 ipv6 地址使用 HttpClient 连接到服务器(使用 ipv6 地址定义 URI)修复 - 无效 URI:指定的端口无效)
【发布时间】:2013-10-30 07:28:41
【问题描述】:

我有一个简单的 HttpClient,它在使用 ipv4/fqdb/host 名称时可以完美运行(请参阅下面的代码 sn-p)。但是,当我尝试使用 ipv6 地址连接到服务器时,相同的代码不起作用。我可能需要更改一些配置设置并能够使用 ipv6 地址定义 uri。

我查看了msdn,它有以下声明:

如果主机名是 IPv6 地址,则使用 规范 IPv6 地址。 ScopeId 和其他可选的 IPv6 数据被删除 - http://msdn.microsoft.com/en-us/library/system.uri.aspx

不知道是什么意思,会试着弄明白的。

我可以尝试解决什么问题?

看来我需要将 ipv6 地址保留在方括号中 [将其括起来 '[]'] http://[fe08::83e7:71e8:1364:0dff%19]:58703/ 现在看起来一切正常。感谢How to include ipv6 addresses with (or without) zone indexes in uri for .net remoting?

代码:

this.Client = new HttpClient();
**//below line throws UriFormatException (Invalid URI: Invalid port specified)**
this.Client.BaseAddress = new Uri(http://fe08::83e7:71e8:1364:0dff%19:58703/);
this.Client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/xml"));

//whereas below code works, when ipv4/fqdn is used...

this.Client = new HttpClient();
this.Client.BaseAddress = new Uri(10.0.0.1:58501);
this.Client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/xml"));

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc vb.net


    【解决方案1】:

    您需要以RFC 2732 指定的格式指定URI。基本上,将实际的 IPv6 地址用方括号括起来。

    您提到的 ScopeId 是示例 URI 的“%19”部分。非常高级的、挥手的描述是“它基本上确定了该地址对应于本地机器上的哪个网络接口”。 This Super User post 和 this MSDN article 对它的实际含义有合理可理解的详细描述,如果你有兴趣的话。

    在您的情况下,您真正​​需要知道的是,将它包含在 BaseAddress 属性中是没有意义/误导性的,因为该值仅对您的特定机器有意义。在 HTTP 响应中发送它是没有意义的,因为该值对远程客户端没有意义。这就是为什么,正如您提到的文档所指出的那样,即使您将其包含在 BaseAddress 中,HttpClient 也不会使用它。

    最终更新后的 URI 如下所示:

    this.Client.BaseAddress = new Uri(@"http://[ef08::83e7:71e8:1364:0dff]:54502/");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-07
      • 2018-01-29
      • 2021-10-28
      • 2023-04-08
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多