Url Path Encoding实际上有效吗?

时间:2016-11-16 22:33:45

标签: c# urlencode

根据RFC 3986,路径组件的有效字符为:

a-z A-Z 0-9 . - _ ~ ! $ & ' ( ) * + , ; = : @

以及百分比编码的字符,当然还有斜杠/

但是我找不到根据上述规则将字符串转换为格式良好的路径的类。

string rawPath = "/A9_(+@*)/# ?/";
string expectedPath = "/A9_(+@*)/%23%20%3f";

但是,请参阅以下代码:

string rawPath = "/A9_(+@*)/# ?/";
Uri.EscapeDataString(rawPath); //Output=>%2FA9_%28%2B%40%2A%29%2F%23%20%3F%2F
Uri.EscapeUriString(rawPath); //Ouput=>/A9_(+@*)/#%20?/
HttpUtility.UrlPathEncode(rawPath); //Ouput=>/A9_(+@*)/#%20?/

我尝试过的任何东西都不允许使用未转义的角色,而且所有其他角色都会逃脱。

希望有人可以让我免于编写自己的实用程序!

1 个答案:

答案 0 :(得分:1)

这些中的每一个都基于URI创建中的各种规则提供预期的编码。这是因为包含了保留字符(参见RFC 3968的2.2节),其中包括?#,它们是标准定义的分隔符。这些不会被转义,因为它们是语言定义的一部分。