首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ipv6地址连接到使用HttpClient (使用ipv6地址定义URI)的服务器-无效URI:指定的无效端口

使用ipv6地址连接到使用HttpClient (使用ipv6地址定义URI)的服务器-无效URI:指定的无效端口
EN

Stack Overflow用户
提问于 2013-10-30 07:28:41
回答 1查看 6.1K关注 0票数 3

我有一个简单的HttpClient,它在使用ipv4 4/fqdb/主机名时工作得很好(请参阅下面的代码片段)。尽管相同的代码不起作用,但在我试图使用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/括起来,看起来现在一切正常。多亏了如何将带(或不带)区域索引的ipv6地址包含在uri中用于.net远程处理?

代码:

代码语言:javascript
运行
复制
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"));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-30 07:52:07

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

您提到的ScopeId是示例URI的"%19“部分。最高级的、挥动手的描述是“它基本上可以识别地址对应于本地机器上的哪个网络接口”,如果您感兴趣的话,这个超级用户帖子这篇MSDN文章对其真正含义的详细描述是可以理解的。

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

最后更新的URI如下所示:

代码语言:javascript
运行
复制
this.Client.BaseAddress = new Uri(@"http://[ef08::83e7:71e8:1364:0dff]:54502/");
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19676265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档