.net URI 编码不正确

本文关键字:不正确 编码 URI net | 更新日期: 2023-09-27 18:24:14

我需要解析http://website.com/page?id=ABCD | EFG

Dim WebR As HttpWebRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest)

任何普通的浏览器(如火狐浏览器(都会对URL进行如下编码:http://website.com/page?id=ABCD%20|%20EFG

但是,当使用我提供的代码或创建新的 URI 时,URL 将编码为:http://website.com/page?id=ABCD%20%7C%20EFG

这对我不起作用,因为那个id不存在。

如何解决这个问题?

.net URI 编码不正确

这里的诀窍是:不要从非法网址开始。如果您自己构造 url,则您的工作是转义组件。例如:

string id = "ABCD | EFG"; // perhaps via some more complicated code
string url = "http://website.com/page?id=" + Uri.EscapeDataString(id);

这将正确输出http://website.com/page?id=ABCD%20%7C%20EFG .这是正确的网址。 | 不是 URL 中的有效字符。

从 https://www.rfc-editor.org/rfc/rfc3986#section-2 开始,未保留的字符定义为

unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"

其中ALPHA定义为A - Za - zDIGIT定义为0 - 9

其他任何内容都需要进行 % 编码。