我正在创建一个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
类。
答案 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);
}