c# – 使用ipv6地址连接到使用HttpClient的服务器(使用ipv6地址
我有简单的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地址[将其括起来'[]’] 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/"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |