C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 使用ipv6地址连接到使用HttpClient的服务器(使用ipv6地址定义URI)修复 – 无效的URI:指定的端口无效)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有简单的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 postthis MSDN article可以合理地理解其实际含义的详细描述.

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

最终更新的URI如下所示:

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

大佬总结

以上是大佬教程为你收集整理的c# – 使用ipv6地址连接到使用HttpClient的服务器(使用ipv6地址定义URI)修复 – 无效的URI:指定的端口无效)全部内容,希望文章能够帮你解决c# – 使用ipv6地址连接到使用HttpClient的服务器(使用ipv6地址定义URI)修复 – 无效的URI:指定的端口无效)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: