所以我有一个我上传到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确保您获得与最初编码相同的信息的正确方法是什么?
答案 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);
}
运行此处
答案 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;