Я посмотрел исходный код MS в соответствии с их интерпретацией: сам HttpClient не имеет «Content-Type», только контент должен иметь content-type.Кажется логичным, за исключением случаев, когда вы имеете дело с MultipartFormDataContent.MultipartFormDataContent полностью игнорирует следующий код:
string boundary = "--" + GenerateRandomString();
using (var content = new MultipartFormDataContent(boundary))
{
content.Headers.ContentType = new MediaTypeHeaderValue($"multipart/form-data");
content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("boundry", boundary));
...
}
В запросе отсутствует «Content-Type».И также игнорирует:
string boundary = "--" + GenerateRandomString();
using (var content = new MultipartFormDataContent(boundary))
{
content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary);
...
}
При попытке установить его на HttpClient
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary);
выдает следующую ошибку:
System.InvalidOperationException: 'Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.'
Я могу найти множество примеров того, как сделать это с помощью StringContent, но ни одного с MultipartFormDataContent.MultipartFormDataContent позволяет устанавливать Content-Type и Content-Disposition для каждого поля, мне это нужно больше на уровне клиента.Мне нужен заголовок, который выглядит примерно так:
accept: application/json
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Basic ZXlKbGRDSTZJakUxTWpZNU9UTXpOTnpkMjl5WkNJNklqa3haRGxtWkdKa1lUazRaVEJqWmpsalpUaGxNV1V3TXpOalxuWmpCbE1tVXhJaXdpZFhObGNpSTZJbUZrYldsdUluMD1cbjo=
Cache-Control: no-cache
Многие API сторонних разработчиков требуют тега border, чтобы он мог различать отдельные поля отправляемых данных.Проверка здесь по запросу кажется немного чрезмерной.Даже TryAddWithoutValidation не работает (может быть, ошибка?).Я понимаю, что, возможно, можно интерпретировать RFC7578 так, чтобы он говорил, что он не должен быть обязательным, но упрямый, не позволяя, чтобы он мне тоже не казался правильным.Кто-нибудь еще сталкивался с этой проблемой и решал ее.