###前提・実現したいこと
C#でサーバーにテキストデータをPOSTするプログラムを作っています。
複数のデータをHttpClientのPostAsyncで投げると、
最初のデータの中身がヘッダーよりも先に送信されてしまうため、通信が失敗します。
どうすれば正しく通信出来るのでしょうか。
-----以下10/26 追記-----
MultipartFormDataContentのAddメソッドについて、
例えば、下記のように書いた場合、
content.Add(new StringContent("test1"), "string1");
送信されるデータには
--boundary Content-Disposition: form-data; name=string1 test1 --boundary
というヘッダとデータが組になって追加される認識でしたが、
--boundary Content-Disposition: form-data; name=TestData; filename=TestFile Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=string1 TestMainData --boundary
上記のようにヘッダとデータの間に別のデータが挿入されたりするものなのでしょうか。
###発生している問題・エラーメッセージ
パケットキャプチャで実際にキャプチャ出来たデータ --boundary test1 --boundary Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=string2 test2 --boundary Content-Disposition: form-data; name=TestData; filename=TestFile Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=string1 TestMainData --boundary 想定しているデータ --boundary Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=string1 test1 --boundary Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=string2 test2 --boundary Content-Disposition: form-data; name=TestData; filename=TestFile TestMainData --boundary
###該当のソースコード
C#
1private async Task<bool> test() 2{ 3 var content = new MultipartFormDataContent(); 4 var mainData = new ByteArrayContent(Encoding.UTF8.GetBytes("TestMainData")); 5 mainData.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") 6 { 7 Name = "TestData", 8 FileName = "TestFile", 9 }; 10 11 content.Add(new StringContent("test1"), "string1"); 12 content.Add(new StringContent("test2"), "string2"); 13 content.Add(mainData); 14 15 using (var httpClient = new HttpClient()) 16 { 17 HttpResponseMessage response = await httpClient.PostAsync(targetUri, content); 18 return response.IsSuccessStatusCode; 19 } 20}
###試したこと
メインデータをAddせず、StringContent 2個だけを送信してみましたが、
Content-Disposition: form-data; name=string1
の行が最後に来てしまうため、通信エラーとなってしまいました。
###補足情報
OS:Windows10 Pro
開発環境:VisualStudio2015 Update3
System.Net.Http のランタイムバージョン:v4.0.30319
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/30 04:10