C# 使用MultipartFormDataContent生成的内容类型标头错误

C# 使用MultipartFormDataContent生成的内容类型标头错误,c#,.net-4.5,content-type,multipartform-data,dotnet-httpclient,C#,.net 4.5,Content Type,Multipartform Data,Dotnet Httpclient,我有以下代码: private static string boundary = "----CustomBoundary" + DateTime.Now.Ticks.ToString("x"); private static async Task<string> PostTest() { string servResp = ""; using (var content = new MultipartFormDataContent(boundary)) {

我有以下代码:

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 Composer中运行请求,那么请求将得到正确处理

我尝试添加内容标题:

//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);
。。。但它不起作用,错误消息是:“无法添加值,因为标题‘内容类型’不支持多个值。”和“值‘多部分/表单数据,边界=----CustomBoundary8d0f024297b32d5’的格式无效。”

如何将适当的内容类型头添加到请求中,以便边界值不会被括在引号中

Content-Type: multipart/form-data; boundary=----CustomBoundary8d0f01e6b3b5daf

通过从MultipartFormDataContent中删除标头并在未经验证的情况下重新添加标头,解决了此问题:

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

从技术上讲,服务器应该接受引用的边界参数。很高兴你找到了解决办法。非常聪明的人,你让我开心!清晰的解决方案,以及解释清楚的问题陈述。
content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary);