2017-09-08 19 views
-1

Webclient.DownloadFile()メソッドを使用してC#コンソールアプリケーションからファイルをダウンロードしようとしています。 A-ZA-Z0-9という名前のファイルを簡単にダウンロードできます。しかし、ファイル名に '%'がある場合は、400のBad Requestが返されます。webclientが '%'でファイル名をダウンロードできません:400 Bad Request Exception

string filename = "a%bc.txt"; 
string remotePath = "https://exampleURL.com/Folder/"+filename; 
striing localPath = @"F:\"+filename; 
using (WebClient client = new WebClient()) 
{ 
    client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 
    client.DownloadFile(new Uri(remotePath), localPath); 
    Console.WriteLine("Done"); 
} 

IはHTTPUtility.URLEncode()を試みたが、それは404エラーを得た:以下

私は使用のコードです。私はいくつかのブログを紹介しましたが、私の方法で働いた人はいませんでした。助けてください!

UPDATE:

は、次の例外の詳細です:%は有効なURL文字であるため、

Exception information: 
    Exception type: HttpException 
    Exception message: A potentially dangerous Request.Path value was detected from the client (%). 
    at System.Web.HttpRequest.ValidateInputIfRequiredByConfig() 
    at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context) 
+0

(2番目のコードブロックなど)HttpUtility' 'を使用してコードを含めてください。 **正常に**ファイルをダウンロードするためにあなたのウェブブラウザからどのURLを使用したかを確認してください。 _Preferably例ではない - **実際の** url._ – mjwills

+0

そのコンソールアプリケーション、私はWebブラウザを使用しないでください。また、申し訳ありませんが、実際のURLを公式に投稿することはできません – Parth

答えて

-1

URLENCODEは、文字列内の%をエスケープしません。

これが適切にURIで使用するためにファイル名をエスケープし、返す必要があります

Uri.EscapeDataString(filename) 

使用:%25bc.txt

+0

'HttpUtility.UrlEncode'も' a%25bc.txt'を返します:) –

+0

残念ながら私はIDEの近くにいませんのでテストできません。これは面白く聞こえますが、URIまたはクライアントがそれをデコードしていないことを確認してください... 2度エンコードしてみてください。だからそれは%2525bc.txtとして終わる – RandomString

関連する問題