加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用ipv6地址连接到使用HttpClient的服务器(使用ipv6地址

发布时间:2020-12-16 01:58:01 所属栏目:百科 来源:网络整理
导读:我有简单的HttpClient,在使用ipv4 / fqdb / host名称时效果很好(请参阅下面的代码片段).但是相同的代码不起作用,momemnt我试图使用ipv6地址连接到服务器.我可能需要更改一些配置设置并能够使用ipv6地址定义uri(我查看了msdn并且它具有以下语句 – 如果主机名
我有简单的HttpClient,在使用ipv4 / fqdb / host名称时效果很好(请参阅下面的代码片段).但是相同的代码不起作用,momemnt我试图使用ipv6地址连接到服务器.我可能需要更改一些配置设置并能够使用ipv6地址定义uri(我查看了msdn并且它具有以下语句 – 如果主机名是IPv6地址,则使用规范的IPv6地址.ScopeId和其他可选的IPv6数据被删除 – http://msdn.microsoft.com/en-us/library/system.uri.aspx – 不确定它意味着什么,将试图明天解决它).

同时,任何解决问题的想法/想法/方法都非常有用:).

看起来我需要在squered括号中保留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"));

问候.

解决方法

您需要以 RFC 2732指定的格式指定URI.基本上,将实际IPv6地址包装在方括号中.

你提到的ScopeId是“?”示例URI的一部分.非常高级的,挥手的描述是“它基本上识别了地址在本地机器上对应的网络接口.”如果您感兴趣,This Super User post和this MSDN article可以合理地理解其实际含义的详细描述.

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

最终更新的URI如下所示:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读