【发布时间】:2018-05-25 11:32:46
【问题描述】:
我正在构建一个 Outlook 加载项,该加载项对我拥有的外部 API 进行身份验证。对于我的一个函数,我将附件 ID 列表从加载项发送到 API。然后,我可以使用这些 ID 从 Microsoft 的 Exchange Managed API 获取相应的附件。问题是因为我使用的是 .NET Core,所以推荐的库缺少访问附件所需的必要功能。
这是我试图用来访问主 Microsoft.Exchange.WebServices 库中的附件的一些代码:
ServiceResponseCollection<GetAttachmentResponse> getAttachmentsResponse = service.GetAttachments(attachmentInfo.attachmentIds.ToArray(), null, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent));
if (getAttachmentsResponse.OverallResult == ServiceResult.Success)
{
foreach (var attachmentResponse in getAttachmentsResponse)
{
// removed logic for simplicity
}
}
问题是第一行代码会引发错误,除非我在其末尾附加.Result。这是 .NET Core 版本的库中的一些缺陷。当我使用它时,任务永远不会离开Awaiting Action 或类似的状态。
另一个应该为 .NET Core 调整的库是 Microsoft.Exchange.WebServices.NETStandard。
这是我发现的一些可以工作的代码:
var getAttachmentsResponse = service.GetAttachments(attachmentInfo.attachmentIds.ToArray(), null, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent));
foreach (var attachmentResponse in getAttachmentsResponse)
{
// removed logic for simplicity
}
使用此示例,对象模型不同,响应中甚至没有Overall Result。更不用说,调用会立即失败,并出现关于存在重复键的错误。我可能记得在某处读到此方法仅接受用户名/密码凭据。
是否有任何其他解决方案可以帮助我从我的 API 接收来自 Outlook 电子邮件的附件?我是否遗漏了一些非常明显的东西?
【问题讨论】:
-
这看起来像一个异步库...为什么不等待调用,这样您就不会得到 Task
结果而是 T ...示例 var getAttachmentResponse = await service .GetAttachment (....); -
在前面添加异步并使函数异步(它需要)时,我收到一条错误消息,提示“ServiceResponseCollection
”不包含“GetAwaiter”的定义,并且没有扩展方法“GetAwaiter” ' 可以找到接受“ServiceResponseCollection ”类型的第一个参数(您是否缺少 using 指令或程序集引用?)
标签: asp.net asp.net-core exchange-server outlook-addin office-js