MimeKit。是否可以阅读多部分/相关内容?

时间:2017-09-07 15:44:47

标签: c# sharepoint mimekit

我正在尝试读取sharepoint中文档的内容,并且我正在重用名为cellstorage.csv / CellStorageService的Web服务

响应是一个多部分,包含一个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 个答案:

答案 0 :(得分:0)

由于像HttpWebResponse这样的类负责解析HTTP头(包括Content-Type头)并且只提供要使用的内容流,MimeKit提供了一种使用{{1上的以下两个静态方法来处理它的方法}}:

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));