在ASP.NET中,为什么有UrlEncode()和UrlPathEncode()?

qua*_*els 7 asp.net url urlencode url-encoding

在最近的一个项目中,我有幸排除了一个错误,该错误涉及当文件名中有空格时图片无法加载.我想"这是一个简单的问题,我会的UrlEncode()!" 但是,NAY!简单地使用UrlEncode()没有解决问题.

新的问题是HttpUtilities.UrlEncode()方法交换空间() to plusses (+)代替%20,如浏览器通缉.因此,file+image+name.jpg如果file%20image%20name.jpg发现正确,将返回not-found .

值得庆幸的是,一位同事HttpUtilities.UrlPathEncode()向我指出哪种用途%20代替空间+.

为什么有两种处理Url编码的方法?为什么有两个命令行为如此不同?

Con*_*ell 9

UrlEncode对于与QueryString一起使用非常有用,因为+当使用该GET方法提交表单时,浏览器倾向于使用此处代替空格.

UrlPathEncode简单地替换不能在URL中使用,如所有字符<,>.

两条MSDN链接都包含此引用:

您可以使用UrlEncode方法或UrlPathEncode方法对URL进行编码.但是,这些方法会返回不同的结果.UrlEncode方法将每个空格字符转换为加号字符(+).UrlPathEncode方法将每个空格字符转换为字符串"%20",该字符串表示十六进制表示法的空格.在对URL的路径部分进行编码时使用UrlPathEncode方法,以保证解码的URL一致,无论哪个平台或浏览器执行解码.