C# Url路径编码实际有效吗?

C# Url路径编码实际有效吗?,c#,urlencode,C#,Urlencode,根据RFC 3986,路径组件的有效字符为: a-z A-Z 0-9 . - _ ~ ! $ & ' ( ) * + , ; = : @ 还有百分比编码字符,当然还有斜杠/ 但是,我找不到一个根据上述规则将字符串转换为格式良好的路径的类 string rawPath = "/A9_(+@*)/# ?/"; string expectedPath = "/A9_(+@*)/%23%20%3f"; 但是,请参见下面的代码: string rawPath = "/A9_(+@*)/# ?/

根据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?/
我尝试过的任何方法都不允许角色不被替换,而propery可以转义所有其他角色


希望有人能把我从编写自己的实用程序中解救出来

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

您只是试图以某种方式格式化,还是URL不起作用?可能没有人希望您将
#
作为路径的一部分进行传递;他们希望您将其视为分隔符。没有预先准备好的方法对此并不奇怪——明智的做法是不允许将
#
作为字符包含的路径,不管它们是否可以传递。(我也不希望很多web服务器正确处理这个问题,但这是另一个问题。)这是否回答了您的问题?我不确定我是否同意这个答案。(参见RFC 3968第3.3节)。路径“段”可以由以下部分组成:
未保留/pct编码/sub-delims/”:“/”@“
由于
#
空间
不在该列表中,因此您希望它需要进行百分比编码。