私は次のコードを持っています:
private static string boundary = "----CustomBoundary" + DateTime.Now.Ticks.ToString("x");
private static async Task<string> PostTest()
{
string servResp = "";
using (var content = new MultipartFormDataContent(boundary))
{
content.Add(new StringContent("105212"), "case-id");
content.Add(new StringContent("1/14/2014"), "dateFrom");
content.Add(new StringContent("1/15/2014"), "dateTo");
HttpClientHandler handler = new HttpClientHandler();
cookieContainer = new CookieContainer();
handler.CookieContainer = cookieContainer;
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://somewebsite.com/form");
request.Headers.ExpectContinue = false;
request.Content = content;
httpClient = new HttpClient(handler);
HttpResponseMessage response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
servResp = await response.Content.ReadAsStringAsync();
}
return servResp;
}
実行すると、FiddlerにContent-Typeヘッダーが表示されます。
Content-Type: multipart/form-data; boundary="----CustomBoundary8d0f01e6b3b5daf"
境界値は引用符で囲まれているため、サーバーはリクエストの本文を無視します。引用符を削除してFiddlerComposerでリクエストを実行すると、リクエストは正しく処理されています。
コンテンツヘッダーを追加してみました:
//request.Content.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
//request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data; boundary=" + boundary);
...しかし、それは機能しませんでした。エラーメッセージは次のとおりでした:「ヘッダー 'Content-Type'は複数の値をサポートしていないため、値を追加できません。」および「値 'multipart/form-data、boundary = ---- CustomBoundary8d0f024297b32d5'の形式が無効です。」に対応します。
境界値が引用符で囲まれないように、適切なContent-Typeヘッダーをリクエストに追加するにはどうすればよいですか?
Content-Type: multipart/form-data; boundary=----CustomBoundary8d0f01e6b3b5daf
MultipartFormDataContentからヘッダーを削除し、検証せずに再度追加することで、これを解決しました。
content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary);