创建MediaTypeWithQualityHeaderValue会抛出FormatException

时间:2017-03-10 20:23:54

标签: c#

我正在创建一个MediaTypeWithQualityHeaderValue的实例:

var m = new MediaTypeWithQualityHeaderValue("multipart/form-data; boundary=acrcloud***copyright***2015***8d467c7c10a7062");

它抛出一个FormatException,所以我猜我通过的字符串不符合标准约定。它应该是我的客户端API所需的内容类型。然后我需要将其添加到我的HttpClient以进行API调用:

var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(m);

我的第一个问题是,如何修复我传递的字符串以使格式正确?

我的第二个问题是,是否可以将内容类型设置为此字符串,即使格式不正确?

修改

为了澄清,我试图做相同的事情:

var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data; boundary=acrcloud***copyright***2015***8d467c7c10a7062";

但是改为使用HttpClient类。

1 个答案:

答案 0 :(得分:1)

这失败因为Multipart / form-type不是媒体类型,而是内容类型。通过使用适当的HttpContent对象提供HTTP发送方法(GetAsync,PostAsync,...)来定义内容。对于多部分内容,存在一个特殊的HttpContent类,它允许封装多个HttpContents。所以基本上它是这样的:

using (var client = new HttpClient())
{
  var content = new MultipartFormDataContent("acrcloud***copyright***2015***8d467c7c10a7062");
  content.Add(new StringContent("value"), "key");
  content.Add(new StreamContent(stream)
  {
    Headers =
    {
      ContentDisposition = new ContentDispositionHeaderValue(DispositionTypeNames.Attachment) { Filename = "Filename.txt" }
    }
  }, "filekey");
  await PostAsync("http://www.example.com", content);
}