请注意,此问题与通用 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
这个问题已经被问了几次,并按照回答诸如这样看来API不支持此则直到最近因为在这里,其中提到有新的范围,允许访问共享的日历。但它仍然不起作用。
我在两个平台上对此进行了测试:Azure 和 Microsoft Graph
我调用 Office API v.1.0 为:
授权网址:
Run Code Online (Sandbox Code Playgroud)https://login.microsoftonline.com/common/oauth2/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code
代币网址:
https://login.microsoftonline.com/common/oauth2/token
日历网址:
https://outlook.office.com/api/v1.0/Me/Calendars
它只给我当前登录/授权用户创建的日历。
由于这不起作用,我尝试使用 API 的第 2 版,但得到以下结果:
Run Code Online (Sandbox Code Playgroud)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.
所以我尝试使用 Microsoft Graph 应用程序
我这里的应用程序还包含所有必需的权限。
我调用 office API v2.0 为:
授权网址:
Run Code Online (Sandbox Code Playgroud)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', );
代币网址:
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
我目前正在使用 Microsoft Graph API 将日历事件同步到我的本地应用程序。最后,我不关心保存系列中的每个单独事件,而是更喜欢只保存系列母版,然后自己推断出系列的实例。出于这个原因,我使用 /me/events 调用而不是 /me/calendarView 调用。
我的问题是在编辑系列中的单个事件时。编辑单个事件后,我进行了 /me/events 调用,我可以看到新添加的“异常”类型——这很棒。但是,我不知道如何将该新事件与更改为导致异常的事件相关联。
例如,如果我在周一中午召开每周会议,并且我将今天的会议从中午更改为 2:00,则很容易判断出今天的会议是更改的会议。但是,如果我将今天的会议改为星期五,我怎么知道是今天的会议发生了变化,而不是下周的会议?请记住,我只存储 master,而不是每个 calendarView 事件。
另一个例子是如果我删除一个事件。在这种情况下, /me/calendarView 调用将不再返回该事件。不生成异常类型。并且从 /me/events 调用返回的系列 master 根本没有改变以指示缺少日期。
我习惯使用的格式类似于 iCal/vCal 格式,其中有开始日期、结束日期和例外日期列表。使用这种格式,我可以轻松地从系列母版中判断要跳过哪些日期,而无需“呈现”整个事件并跳过例外情况。如果一个事件被删除,它会被添加到 EXDATE 列表中,然后在渲染时从不考虑它。Microsoft Graph 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。
在过去的几天中(从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端进行,并且确实创建了事件,并且与会者也确实获得了邀请。
由于我们通常重试失败的请求,这引起了混乱,从而导致创建重复的事件。
为了减轻这种情况,我们捕获了此错误代码,并让我们的用户知道该请求很可能已成功,并在尝试再次提交之前检查了他们的日历。
希望能有所帮助。
我们使用 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
我们编写了一个服务应用程序,它从组织(租户)的多个日历中读取 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 订阅?
我在想办法在 Office 365 上获取“已取消”的事件时遇到了麻烦。这似乎是一件非常基本的事情,但是我试图找出如何做到这一点的尝试都没有奏效。
阅读 Office 365 API 文档,我可以看到该Event
资源具有IsCancelled
布尔属性,该属性应显示true
事件是否已取消/删除。
我已经尝试了多种通过 API 获取事件的方法,但都没有成功。似乎一旦一个事件被取消,它就会从返回的结果中删除。
我还看到我可以使用OData 查询参数来尝试过滤事件获取响应的结果,所以我什至尝试$filter=IsCancelled eq true
在请求上设置查询参数,但我得到的只是一个带有空数据数组的响应。:/
有什么明显的我遗漏了吗?这里的文档很简单。
outlook calendar exchangewebservices office365 outlook-restapi
任何人都可以帮助我使用 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>
在谷歌日历中
感谢帮助!
我正在为 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) outlook-restapi ×10
office365 ×5
outlook ×3
azure ×2
calendar ×2
api ×1
c# ×1
javascript ×1
rest ×1