У меня есть небольшое приложение, которое генерирует HttpMessage с многокомпонентным контентом ...
using (var client = new HttpClient())
{
using (var content = new MultipartContent("mixed", "----123"))
{
content.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/mixed; boundary=----123");
// repeated calls to content.Add(...)
var result = client.PostAsync(url, content). Result;
Console.WriteLine(result);
}
}
, и у меня есть маленький HttpServer, который прослушивает вызовы POST и делает это, когда он получает один ...
var streamContent = new StreamContent(inputStream);
streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/mixed; boundary=----123");
var provider = streamContent.ReadAsMultipartAsync().Result;
foreach (var httpContent in provider.Contents)
{
var t = httpContent.Headers.ContentType;
var c = httpContent.ReadAsStringAsync().Result;
}
И все это работает.
Но если в моем коде приемника я не включаю строку streamContent.Headers.ContentType...
, то приемник падает на var provider...
строка с ошибкой Invalid 'HttpContent' instance provided. It does not have a content-type header value. 'HttpContent' instances must have a content-type header starting with 'multipart/'.
.
Итак, хотя у меня есть код, который работает, он будет работать, только если я заранее знаю, какой будет граница.
Это не может быть правдой.
Я просмотрел и попробовал десятки перестановок на основе вопросов здесь, в SO и в других местах, но я не могу найти ничего, что работает без меня установка заголовка ContentType
в приемнике и, следовательно, знание значения границы.
Что должен делать?
ОБНОВЛЕНИЕ
Если я удаляю граничную часть заголовка ContentType
в приемнике, он все равно падает, но с другой ошибкой ... Invalid 'HttpContent' instance provided. It does not have a 'multipart' content-type header with a 'boundary' parameter.