2016-11-10 3 views
0

私の.NETアプリケーションの1つで、HttpClient経由でサイトにファイルをアップロードするメソッドを実行しました。ここに実装されていますHttpClientのキリル文字のシンボルアップロードのためのPOST要求

 using (var clientHandler = new HttpClientHandler 
     { 
      CookieContainer = cookieContainer, 
      UseDefaultCredentials = true 
     }) 
     { 
      using (var client = new HttpClient(clientHandler)) 
      { 
       client.BaseAddress = requestAddress; 
       client.DefaultRequestHeaders.Accept.Clear(); 
       using (var content = new MultipartFormDataContent()) 
       { 

        var streamContent = new StreamContent(new MemoryStream(fileData)); 

        streamContent.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse("form-data"); 
        streamContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("name", "contentFile")); 
        streamContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("filename", "\"" + fileName + "\"")); 
        streamContent.Headers.ContentType = new MediaTypeHeaderValue(contentType); 

        content.Add(streamContent); 

        HttpResponseMessage response = await client.PostAsync("/Files/UploadFile", content); 


        if (response.IsSuccessStatusCode) 
        { 
         return true; 
        } 

        return false; 
       } 
      } 
     } 

メソッドは正常に動作します。しかし、私がキリル文字のシンボルを渡すときfileNameプロパティが生成された投稿要求ファイル名がのように壊れていますか?の場合はキリル記号を置き換えます。腐敗することなくキリル文字を送る方法はありますか?

+0

おそらく[this](https://stackoverflow.com/questions/19196258/url-cyrillic-encoding-issue-with-webbrowser-control)の複製です。 – user5226582

答えて

0

私はfilenameがコードページの面でできることは非常に限られていると思います。私はそれがASCII(100%ではない)のみをサポートしていると思います。より良いヘッダーを使用することができますfilename*と呼ばれる少しgoogleは*を削除してからすべての通常のfilenameを取得します。

あなたがこれを使用する必要が長い話を短く:あなたはその上で、もう少しグーグル+ SO postこれを確認することができます

$"filename*=UTF-8''{fileName}" 

ます。また、スペースに関して、ファイル名の一部のエンコーディングを行う必要があるかもしれない、など。

P.S.古いブラウザの中にはそれが気に入らないものもあります。要件を確認する必要があります。

関連する問題