MimeKit. Можно ли читать составной / связанный контент?
Я пытаюсь прочитать содержимое документа в sharepoint и повторно использую веб-сервис с именем celltorage.csv/CellStorageService
Ответ является составным, содержащим одну XML-часть и одну двоичную часть.
Я хотел бы прочитать двоичную часть.
Тип контента:
Content-Type: multipart/related; type="application/xop+xml"; boundary="urn:uuid:a192024b-547a-584b-a56c-b05f25c22fdf"; start="<1c830af4-214f-1c4b-8a71-6269053e3161@tempuri.org>"; start-Info="text/xml; charset=utf-8"
Возвращаемый контент:
--uuid:acf0b1de-4e59-4304-ba6e-23a7a4e2a9cc+id=1
Content-ID: <http://tempuri.org/0>
Content-Transfer-Encoding: 8bit
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body>
<ResponseVersion Version="2" MinorVersion="3"
xmlns="http://schemas.microsoft.com/sharepoint/soap/"/><ResponseCollection
WebUrl="
...
></SubResponse></Response></ResponseCollection></s:Body></s:Envelope>
--uuid:acf0b1de-4e59-4304-ba6e-23a7a4e2a9cc+id=1
Content-ID: <http://tempuri.org/1/636403683925268534>
Content-Transfer-Encoding: binary
Content-Type: application/octet-stream
Поскольку в этом проекте я уже использую MimeKit, я попытался загрузить его в Mimekit, чтобы он мог его анализировать:
ContentType contentType1 = ContentType.Parse("application/xop+xml");
MimeEntity entity1 = MimeEntity.Load(contentType1, new MemoryStream(bytes));
ContentType contentType = ContentType.Parse("application/octet-stream");
MimeEntity entity = MimeEntity.Load(contentType, new MemoryStream(bytes));
MimeParser parser = new MimeParser(new MemoryStream(bytes), MimeFormat.Entity);
//var message = parser.ParseMessage();
var entity3 = parser.ParseEntity();
Когда я смотрю на результат в отладчике, все 3 объекта (entiy, entity1 и entity3) выглядят одинаково, и кажется, что был проанализирован только контент xml.
Я не могу получить двоичную часть.
Не могли бы вы сообщить мне, можно ли использовать MimeKit для анализа этого типа контента, и правильно ли я его анализирую?
Большое спасибо
жилль
1 ответ
Поскольку такие классы, как HttpWebResponse, занимаются анализом заголовков HTTP (который включает заголовок Content-Type) и предлагают только поток контента для использования, MimeKit предоставляет способ справиться с этим, используя следующие два статических метода: MimeEntity
:
public static MimeEntity Load (ParserOptions options, ContentType contentType, Stream content, CancellationToken cancellationToken = default (CancellationToken));
public static MimeEntity Load (ContentType contentType, Stream content, CancellationToken cancellationToken = default (CancellationToken));
Вот как вы можете использовать эти методы:
MimeEntity ParseMultipartFormData (HttpWebResponse response)
{
var contentType = ContentType.Parse (response.ContentType);
return MimeEntity.Parse (contentType, response.GetResponseStream ());
}