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

How can I get the FileAttachment from a Message instead of the Attachment

首先感谢您抽空阅读我的问题!

我需要检索邮件附件的 'ContentByte'。

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

这是我的代码:

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

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

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

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

谢谢!

这是预期的行为,因为 Message.Attachments returns Attachment type 的集合。
要获取文件附件列表,可以按 FileAttachment type via 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;
     //...
}