标签: outlook-restapi

来自 .net 控制台应用程序的 Office 365 REST API 调用

请注意,此问题与通用 REST 服务调用无关。它是关于特定的 Office 365 REST 服务 API。

具体来说,我需要在这里使用“联系人”API:https : //msdn.microsoft.com/office/office365/APi/contacts-rest-operations#UsingtheContactsRESTAPI

我想知道如何在控制台应用程序中使用 Office 365 REST 服务。有一些工具可以处理来自 Web、移动和 Windows 商店应用程序的 API。但是我没有找到控制台应用程序的资源。

我在应用程序注册门户上创建了应用程序:https : //apps.dev.microsoft.com

所以我已经有了应用程序 ID、应用程序机密、平台移动应用程序(客户端 ID、重定向 URI)

我想我需要身份验证令牌(我有用户名、密码)。并使用它来调用 REST 服务。

c# active-directory office365 outlook-restapi office365-restapi

6
推荐指数
1
解决办法
1万
查看次数

如何从 Office REST API 访问共享日历?

这个问题已经被问了几次,并按照回答诸如这样看来API不支持此则直到最近因为在这里,其中提到有新的范围,允许访问共享的日历。但它仍然不起作用。

我在两个平台上对此进行了测试:Azure 和 Microsoft Graph

  1. Azure 广告应用

我在 Azure AD 中的应用程序具有所有必需的权限: 在此处输入图片说明

在此处输入图片说明在此处输入图片说明

我调用 Office API v.1.0 为:

授权网址:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code
Run Code Online (Sandbox Code Playgroud)

代币网址: https://login.microsoftonline.com/common/oauth2/token

日历网址: https://outlook.office.com/api/v1.0/Me/Calendars

它只给我当前登录/授权用户创建的日历。

由于这不起作用,我尝试使用 API 的第 2 版,但得到以下结果:

Additional technical information:
Correlation ID: 7abf370a-d918-4514-bd74-cf5fc93fe3cf
Timestamp: 2016-10-31 09:32:06Z
AADSTS70001: Application 'f7571710-84e2-4444-8bfe-5eef92f4a46d' is not supported for this API version.
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用 Microsoft Graph 应用程序

  1. 微软图形应用

我这里的应用程序还包含所有必需的权限。

在此处输入图片说明

我调用 office API v2.0 为:

授权网址:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code&scope=%3$s
Run Code Online (Sandbox Code Playgroud)

范围是:

private static $scopes = array(
    'https://outlook.office.com/calendars.read',
    'https://outlook.office.com/calendars.readwrite',
    'https://outlook.office.com/calendars.read.shared',
    'https://outlook.office.com/calendars.readwrite.shared',
);
Run Code Online (Sandbox Code Playgroud)

代币网址: https://login.microsoftonline.com/common/oauth2/v2.0/token

日历网址: https://outlook.office.com/api/v2.0/Me/Calendars

再次不给我共享日历。 …

calendar azure office365 outlook-restapi microsoft-graph-api

6
推荐指数
1
解决办法
1万
查看次数

如何通过 Microsoft Outlook Calendar Graph API 查找重复异常

我目前正在使用 Microsoft Graph API 将日历事件同步到我的本地应用程序。最后,我不关心保存系列中的每个单独事件,而是更喜欢只保存系列母版,然后自己推断出系列的实例。出于这个原因,我使用 /me/events 调用而不是 /me/calendarView 调用。

我的问题是在编辑系列中的单个事件时。编辑单个事件后,我进行了 /me/events 调用,我可以看到新添加的“异常”类型——这很棒。但是,我不知道如何将该新事件与更改为导致异常的事件相关联。

例如,如果我在周一中午召开每周会议,并且我将今天的会议从中午更改为 2:00,则很容易判断出今天的会议是更改的会议。但是,如果我将今天的会议改为星期五,我怎么知道是今天的会议发生了变化,而不是下周的会议?请记住,我只存储 master,而不是每个 calendarView 事件。

另一个例子是如果我删除一个事件。在这种情况下, /me/calendarView 调用将不再返回该事件。不生成异常类型。并且从 /me/events 调用返回的系列 master 根本没有改变以指示缺少日期。

我习惯使用的格式类似于 iCal/vCal 格式,其中有开始日期、结束日期和例外日期列表。使用这种格式,我可以轻松地从系列母版中判断要跳过哪些日期,而无需“呈现”整个事件并跳过例外情况。如果一个事件被删除,它会被添加到 EXDATE 列表中,然后在渲染时从不考虑它。Microsoft Graph API 是否没有一种简单的方法来查看这些更改/删除的事件?

outlook-restapi microsoft-graph-api

6
推荐指数
1
解决办法
847
查看次数

仅用于本地设置的 Outlook Rest API

我正在尝试比较需要连接到本地交换服务器的应用程序的 EWS 与 Outlook REST API 的使用情况。据我了解,Exchange 2016 开始支持 REST API,当确定邮箱位于本地时,图形 API 也会在内部利用这些 API。

我的问题是,如果我不需要支持云\混合设置,我的应用程序是否可以直接使用 REST API 与本地交换(类似于 EWS)进行通信?

例如,我可以使用https://my-on-prem-exchnagehost/api/v2.0/me/messages连接到 my-on-prem-exchnagehost 并与之对话吗?

有关 Outlook REST API 的所有资源都讨论混合部署,但不讨论仅本地设置。我的目的是对本地和云使用一种实现,其中仅 API 端点在应用程序中发生变化,例如本地的https: //my-on-prem-exchnagehost/api/v2.0/me/messages以及用于云的https://graph.microsoft.com/api/v2.0/me/messages

outlook-restapi microsoft-graph-api

6
推荐指数
1
解决办法
4197
查看次数

尝试使用Outlook REST API在日历上创建事件时获取错误代码`ErrorIrresolvableConflict`响应

在过去的几天中(从2019年10月28日开始),我们没有进行任何代码更改,我们开始看到来自服务器的大量请求以在日历上创建事件(使用此端点:https:// docs.microsoft.com/zh-CN/previous-versions/office/office-365-api/api/version-2.0/calendar-rest-operations#CreateAnEvent)返回错误。

错误是:ErrorIrresolvableConflict,并显示错误消息:

The send or update operation could not be performed because the change key passed in the request does not match the current change key for the item.

我们怀疑这是Graph API / Outlook REST API / Exchange方面的新问题,但没有可见性。我们找到了这篇文章:https : //support.office.com/en-us/article/the-operation-cannot-be-performed-because-the-item-has-changed-74c99323-8a0d-4d45-ad32-e462e215a82a

尽管它没有提到Outlook REST API,但这似乎有些相关。

有人可以确认这确实是MSFT的长期问题吗?如果不是,也许在安排事件的背景下对此错误有所了解?

-

编辑:截至11月8日,此问题尚未解决。对于遇到此问题的任何人,我想分享到目前为止的观察:

返回此错误后,请求似乎仍然在Outlook端进行,并且确实创建了事件,并且与会者也确实获得了邀请。

由于我们通常重试失败的请求,这引起了混乱,从而导致创建重复的事件。

为了减轻这种情况,我们捕获了此错误代码,并让我们的用户知道该请求很可能已成功,并在尝试再次提交之前检查了他们的日历。

希望能有所帮助。

exchangewebservices outlook-restapi microsoft-graph

6
推荐指数
0
解决办法
596
查看次数

Microsoft Graph Batch API 并发请求减少至 4 个,而 Outlook 的并发请求为 200 个

我们使用 Outlook Batch API在单个 HTTP 批处理请求中发送多个 Outlook REST 请求。在 Outlook Batch API 中,我们在同一批 HTTP 请求中发出 200 个请求,并且所有并发请求都成功。而如果我们在图API中执行相同的操作,则只有 4 个并发请求成功,因为图 API 中仅支持 4 个并发请求(附加请求和响应)。

我们有这样的情况,例如一次创建 10000 个事件(例如用户可以从单个用户日历中添加/删除 10000 个项目)。

因此,如果将 Graph API 批量限制设置为与 Outlook API 相同(200 个并发请求),将会有很大帮助。

样品请求:

{
    "requests": [
        {
            "url": "/me/calendars",
            "method": "POST",
            "id": "1",
            "headers": {
                "Content-Type": "application/json"
            },
            "body": {
                "name": "test1s"
            }
        },
        {
            "url": "/me/calendars",
            "method": "POST",
            "id": "2",
            "headers": {
                "Content-Type": "application/json"
            },
            "body": {
                "name": "test2"
            }
        },
        { …
Run Code Online (Sandbox Code Playgroud)

outlook outlook-restapi microsoft-graph-sdks microsoft-graph-api

6
推荐指数
1
解决办法
646
查看次数

在没有 Office 365 订阅的情况下使用 Azure 多租户应用程序访问用户日历信息

我们编写了一个服务应用程序,它从组织(租户)的多个日历中读取 Office 365 日历信息,并对条目进行一些分析。为此,我们使用 Office 365 REST API。
我们有多个客户端组织(租户)需要此功能,因此我按照此处的@Matthias Leibmann文章中的步骤操作使用 Office 365 邮件、日历和联系人 API 构建守护程序或服务应用程序(OAuth2 客户端凭据流)

我们在开发过程中使用了 Azure 试用帐户和 Office 365 试用订阅,一切运行良好,我们已经成功访问​​了多个租户的数据。
但是,当我尝试使用我们的生产 Azure 帐户和生产 Azure Active Directory (AAD) 设置多租户应用程序时,我意识到我无法在“权限”中定义“Office 365 Exchange Online”所需的应用程序权限。其他应用程序”部分,因为我们的生产 AAD 帐户未链接到 Office 365 帐户。
我假设我们可以使用我们的生产 azure 帐户注册 Office 365 的开发人员试用版,这将允许我们设置所需的权限,但我不知道 Office 365 试用版到期后 30 天会发生什么。

有没有办法在不将 Office 365 帐户链接到我们的生产 AAD 的情况下定义这些必需的权限?
这只是 Azure 前端的工具问题,还是存在技术原因,即使我们总是连接到其他公司的 Office 365 帐户,我们也需要自己的 Office 365 订阅?

api rest azure office365 outlook-restapi

5
推荐指数
1
解决办法
518
查看次数

通过 Office 365 REST API 获取“已取消”的事件

我在想办法在 Office 365 上获取“已取消”的事件时遇到了麻烦。这似乎是一件非常基本的事情,但是我试图找出如何做到这一点的尝试都没有奏效。

阅读 Office 365 API 文档,我可以看到Event资源具有IsCancelled布尔属性,该属性应显示true事件是否已取消/删除。

我已经尝试了多种通过 API 获取事件的方法,但都没有成功。似乎一旦一个事件被取消,它就会从返回的结果中删除。

我还看到我可以使用OData 查询参数来尝试过滤事件获取响应的结果,所以我什至尝试$filter=IsCancelled eq true在请求上设置查询参数,但我得到的只是一个带有空数据数组的响应。:/

有什么明显的我遗漏了吗?这里的文档很简单。

outlook calendar exchangewebservices office365 outlook-restapi

5
推荐指数
1
解决办法
1666
查看次数

使用 Microsoft Graph API 将在线会议 URL 添加到事件

任何人都可以帮助我使用 Microsoft Graph API 创建一个事件。

理想的行为是添加一个指向事件的链接,该链接在大多数日历客户端中都是可点击的。这是我使用的事件有效负载的示例:

{
    ...
    "body": {
        "ContentType": "HTML",
        "Content": "<a href=\"https://somelink.com\">Start Online Meeting</a>"
    },
    "onlineMeetingUrl": "https://somelink.com"
}
Run Code Online (Sandbox Code Playgroud)

此有效负载作为 POST 请求发送到 https://graph.microsoft.com/v1.0/me/events

目前的回应是:

{ 
 ...
 'onlineMeetingUrl': null,
 ...
}
Run Code Online (Sandbox Code Playgroud)

和事件的详细信息在日历应用程序中不可点击并以纯文本形式显示

Start Online Meeting

或转换为

Start Online Meeting <https://somelink.com>

在谷歌日历中

感谢帮助!

outlook office365 outlook-restapi microsoft-graph-api

5
推荐指数
1
解决办法
1554
查看次数

使用 msal.js 时保持登录状态

我正在为 Microsoft ToDo 任务构建一个小型 JS 应用程序,并使用 msal.js 库来适应身份验证过程。这工作得很好,我收到一个弹出窗口,我验证了我的个人资料,弹出窗口关闭,我的任务出现在我的屏幕上。

但是:它好像不记得我之前认证过;每次我运行 webpack 应用程序并且页面启动时,它都会显示弹出窗口并要求身份验证。一旦我通过身份验证并刷新页面,它只会向我显示任务,而不会再次显示弹出窗口。我没有尝试等待一个小时,但我认为这与未正确刷新我的访问令牌有关。我对 Outlook/Microsoft API 的了解并不多,所以我可以真正确定我是否正确使用它。

简而言之:如何进行一次身份验证,以便下次启动应用程序时显示任务而无需再次进行身份验证?

我的初始化函数

  this.userAgentApplication = new Msal.UserAgentApplication(microsoftTasksClientId, null, function (errorDes, token, error, tokenType) {
    // this callback is called after loginRedirect OR acquireTokenRedirect (not used for loginPopup/aquireTokenPopup)
    console.log(token)
  })
  let user = this.userAgentApplication.getUser()
  if (!user) {
    const self = this
    // this.userAgentApplication = new Msal.UserAgentApplication(microsoftTasksClientId)
    this.userAgentApplication.loginPopup([`${this.apiRootUrl}Tasks.readwrite`]).then(function (token) {
      self.idToken = token
      user = self.userAgentApplication.getUser()
      if (user) {
        self.getSilentToken()
      }
    }, function (error) {
      console.log(error)
    })
  } …
Run Code Online (Sandbox Code Playgroud)

javascript outlook-restapi azure-ad-msal

5
推荐指数
1
解决办法
2871
查看次数