首先,感谢您抽出宝贵时间阅读我的问题!
我需要检索邮件附件的“ 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类型的地方?
谢谢!
答案 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;
//...
}