如何正确使用UrlEncode和Decode

时间:2015-01-07 10:25:11

标签: c# azure encoding urlencode urldecode

所以我有一个我上传到azure blob存储的文件:

  

C:\ test folder \ A + B \ testfile.txt

和两个扩展方法,帮助编码我的路径以确保它被赋予有效的azure存储blob名称

    public static string AsUriPath(this string filePath)
    {
        return System.Web.HttpUtility.UrlPathEncode(filePath.Replace('\\', '/'));
    }
    public static string AsFilePath(this string uriPath)
    {
        return System.Web.HttpUtility.UrlDecode(uriPath.Replace('/', '\\'));
    }

因此,在上传文件时,我对其进行编码AsUriPath并获取名称test%20folder\A+B\testfile.txt 但当我尝试将其作为文件路径返回时,我得到test folder\A B\testfile.txt,这显然不相同(+已被删除)

使用UrlEncode和UrlDecode确保您获得与最初编码相同的信息的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

如果您使用WebUtility.UrlEncode而不是HttpUtility.UrlPathEncode

,则此功能正常

如果您查看docs on HttpUtility.UrlPathEncode,则会看到它声明:

  

不要使用;仅用于浏览器兼容性。使用UrlEncode。

我编写了一个简单的示例,可以将其粘贴到控制台应用程序中(您需要引用System.Web程序集)

static void Main(string[] args)
{
    string filePath = @"C:\test folder\A+B\testfile.txt";
    var encoded = WebUtility.UrlEncode(filePath.Replace('\\', '/'));
    var decoded = WebUtility.UrlDecode(encoded.Replace('/', '\\'));
    Console.WriteLine(decoded);
}

在此.NET Fiddle

运行此处

答案 1 :(得分:0)

使用System.Uri类正确编码路径:MSDN System.Uri

在您的路径上尝试以下操作并使用调试器进行检查:

        var myUri = new System.Uri("http://someurl.com/my special path + is this/page?param=2");
        var thePathAndQuery = myUri.PathAndQuery;
        var theAbsolutePath = myUri.AbsolutePath;
        var theAbsoluteUri = myUri.AbsoluteUri;