如何从邮件而不是附件中获取FileAttachment

时间:2019-01-14 10:02:21

标签: microsoft-graph microsoft-graph-sdks

首先,感谢您抽出宝贵时间阅读我的问题!

我需要检索邮件附件的“ ContentByte”。

我使用Microsoft.Graph SDK for dotnet。 我检索了一条消息,然后将Message.Body.Content(是html)放入Iframe中。为了显示附件(cid:...),我必须在Message.Attachments中获取它们。但是我有问题。邮件附件具有FileAttachment类型,具有“ ContentByte”属性,可用于显示附件。问题在于,SDK不对Message.Attachments使用类型“ FileAttachment”,而对不具有“ ContentByte”属性的“ Attachment”类型。

这是我的代码:

Message data = await graphClient.Me
                .Messages[messageId]
                .Request().GetAsync();

var base64 = message.Attachments.Where(c => c.ContentId == contentId).ContentByte;

当我使用调试器探索“数据”时,我可以看到FileAttachment中所有正确数据的所有字段。但是,当我尝试使用第二行访问它时,在“ ContentId”下出现一条红线,因为附件的属性不存在。

这是Bug,还是Message类中的错误,还是我必须在某个地方指定要保留FileAttachment类型的地方?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是预期的行为,因为Message.Attachments返回了Attachment type的集合。
要获取文件附件列表,FileAttachment type可以通过OfType Linq method应用过滤器:

//request message with attachments
var message = await graphClient.Me
      .Messages[messageId]
      .Request().Expand("Attachments").GetAsync();
//filter by file attachments and return first one
var fileAttachment = message.Attachments.OfType<FileAttachment>()
      .FirstOrDefault(a => a.ContentId == contentId);

if (fileAttachment != null)
{
     var base64 = fileAttachment.ContentBytes;
     //...
}