尝试使用WebClient下载包含URL中的“:”的文件

时间:2011-11-07 08:03:08

标签: c# asp.net url uri webclient

我正在尝试在URL中下载带冒号':'的文件,并在URL字符串中获得该字符的异常。例如:http://www.somesite.com/url:1/将在WebClient中创建一个例外。使用URI下载文件的另一种方法是什么?如何修复此异常?

以下是一些示例代码:

WebClient wc = new WebClient();
wc.DownloadFile("http://www.somesite.com/url:1/", somePath);

5 个答案:

答案 0 :(得分:4)

您可以尝试对冒号(%3A)进行URL编码。

我总是使用this site对网址进行编码或解码。

你的例子就是这样:

WebClient wc = new WebClient();
wc.DownloadFile("http://www.somesite.com/url%3A1/", somePath);

答案 1 :(得分:2)

网址的路径部分中不能包含许多特殊字符。您将必须对该部分进行编码并将其与服务器地址连接。您可以使用HttpUtility.UrlEncode

执行此操作
string url = "http://www.somesite.com/" + HttpUtility.UrlEncode("url:1/");

答案 2 :(得分:1)

您需要使用HttpUtility.UrlEncode对URI进行编码。见this example。如果它是静态的而不仅仅是使用固定字符翻译(%3A)。

答案 3 :(得分:1)

WebClient对此没有抱怨:

using(var client = new WebClient())
{
    try
    {
        client.DownloadFile(
            "http://stackoverflow.com/users/541404/fake:1",
            @"j:\MyPath\541404.html");
    }
    catch (Exception ex)
    {
        while (ex != null)
        {
            Console.WriteLine(ex.Message);
            ex = ex.InnerException;
        }
    }
}

工作正常。所以;我想你需要再次查看Exception(和任何InnerException),看看问题实际是什么。

答案 4 :(得分:0)

我不是这方面的专家,但是所有浏览器都用“%”+ ASCII代码(十六进制)代替非法字符,所以也许你可以试试"%3A"代替“:”。喜欢:"http://www.somesite.com/url:1/"