1

首先,感谢您花时间阅读我的问题!

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

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

这是我的代码:

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

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

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

这是一个错误,是“消息”类中的错误,还是我必须指定要保留“文件附件”类型的地方?

谢谢!

4

1 回答 1

1

这是预期的行为,因为返回typeMessage.Attachments的集合。 要获取文件附件列表,可以通过Linq 方法按类型应用过滤器:Attachment
FileAttachmentOfType

//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;
     //...
}
于 2019-01-18T13:57:14.520 回答