无法将“边界”添加到多部分/表单数据

时间:2018-07-24 12:22:23

标签: c# asp.net asp.net-web-api

我正在尝试将分段请求发布到Web API。我的控制器如下所示:

using (var client = new HttpClient())
{
    var obj = JsonConvert.SerializeObject(
        model,
        Formatting.None,
        new HttpPostedFileConverter());
    var boundary = "----" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo);
    var contentType = new StringBuilder("multipart/form-data; boundary=")
        .Append(boundary);
    var httpContent = new StringContent(
        obj,
        Encoding.UTF8,
        contentType.ToString());  //error shows here
    var uri = new StringBuilder(_domain)
        .Append("/api/email/send");
    var response = await client.PostAsync(uri.ToString(), httpContent);  
    ....  
    ....  
}  

当我尝试添加contentType时出现问题。它显示错误The format of value 'multipart/form-data; boundary=---***' is invalid.

model包含以下数据:
enter image description here

Attachments类型为List<HttpPostedFileBase>。我之所以没有使用MultipartFormDataContent,是因为我在模型中以json格式保存了上传的文件,而我不知道该如何与MultipartFormDataContent一起使用。如果有人可以告诉我这里出了什么问题,或者如果这不是正确的发布方式,那么请给我看一个示例如何做。

1 个答案:

答案 0 :(得分:0)

不确定这是否可以完全回答您的问题,但我正在处理此问题,发现有两种方法可以解决此问题...

方法一...

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

方法二...

myHttpRequestMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data");
myHttpRequestMessage.Content.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("boundary", "----WebKitFormBoundary7MA4YWxkTrZu0gW"));

但是,话虽如此,在我的特定情况下(与您的情况不完全相同),解决方案是...

System.Net.Http.MultipartFormDataContent myMultipartFormDataContent = new System.Net.Http.MultipartFormDataContent("------WebKitFormBoundary7MA4YWxkTrZu0gW");
myMultipartFormDataContent.Add(new System.Net.Http.StringContent(myTextValue), "users_file", "userAccounts.csv");
myHttpRequestMessage.Content = myMultipartFormDataContent;