Попытка загрузить файл с WebClient, который содержит «:» в URL - PullRequest
2 голосов
/ 07 ноября 2011

Я пытаюсь загрузить файл с двоеточием ':' в URL и получаю исключение с этим символом в строке URL.Например: http://www.somesite.com/url:1/ создаст исключение в WebClient.Как можно загрузить файлы с использованием URI или как я могу исправить это исключение?

Вот пример кода:

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

Ответы [ 5 ]

4 голосов
/ 07 ноября 2011

Вы можете попытаться URL кодировать двоеточие (%3A).

Я всегда использую этот сайт для кодирования или декодирования URL.

Тогда ваш пример будет таким:

WebClient wc = new WebClient();
wc.DownloadFile("http://www.somesite.com/url%3A1/", somePath);
2 голосов
/ 07 ноября 2011

Многие специальные символы не могут содержаться в части пути URL.Вам придется закодировать эту часть и объединить ее с адресом сервера.Вы можете сделать это, используя HttpUtility.UrlEncode

string url = "http://www.somesite.com/" + HttpUtility.UrlEncode("url:1/");
1 голос
/ 07 ноября 2011

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), чтобы увидеть, в чем проблема на самом деле .

1 голос
/ 07 ноября 2011

Вам необходимо кодировать URI, используя HttpUtility.UrlEncode. См. этот пример . Если он статический, тогда просто используйте фиксированный перевод символов (%3A).

0 голосов
/ 07 ноября 2011

Я не эксперт в этом, но все браузеры заменяют недопустимые символы на «%» + код ASCII (hexa), поэтому, возможно, вы можете попробовать "%3A" вместо «:».Нравится: "http://www.somesite.com/url:1/"

...