2011-11-07 50 views
2

我試圖用URL中的冒號':'下載一個文件,並且我在URL字符串中得到了該字符的異常。例如:http://www.somesite.com/url:1/會在WebClient中創建一個例外。什麼是使用URI下載文件的另一種方式,或者我該如何解決這個異常?試圖下載一個WebClient的文件,該文件包含URL中的':'

下面是一些示例代碼:

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

「例外」通常不是很有幫助;你可以更具體一些,包括確切的異常消息和任何內部異常消息嗎? –

+0

我很抱歉。錯誤不是由於UrlEncoding引起的。經過對異常的更多分析之後,我瞭解到由於某種原因,我的本地文件路徑中有':'。這是由於我將文件保存到本地機器的方式。我沒有注意到這一點。 –

回答

4

你可以試着URL編碼冒號(%3A)。我使用this site來編碼或解碼URL。

你的例子會是這樣,那麼:

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

你需要使用HttpUtility.UrlEncode編碼的URI。請參閱this example。如果它是靜態的,則僅使用固定字符轉換(%3A)。

0

我不是這方面的專家,但所有的瀏覽器都會用非法字符替換「%」+ ASCII碼(hexa),所以也許你可以試試"%3A"而不是「:」。如:"http://www.somesite.com/url:1/"

1

許多特殊字符不能包含在URL的路徑部分。您必須對該部分進行編碼並將其與服務器地址連接起來。您可以使用HttpUtility.UrlEncode

string url = "http://www.somesite.com/" + HttpUtility.UrlEncode("url:1/"); 
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),看看問題實際上是。

相關問題