web-dev-qa-db-ja.com

MultipartFormDataContentを使用して生成された間違ったContent-Typeヘッダー

私は次のコードを持っています:

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
15
Yan F.

MultipartFormDataContentからヘッダーを削除し、検証せずに再度追加することで、これを解決しました。

content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary);
29
Yan F.