如何从消息而不是附件中获取 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;
//...
}
首先感谢您抽空阅读我的问题!
我需要检索邮件附件的 '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;
//...
}