Microsoft Graph List outlookTask 不返回不可变 ID,即使它在 header 中是首选
Microsoft Graph List outlookTask not returning immutable ID even if it's in preferred in header
所以在文档中,它说如果你想获得具有不可变 ID 的任务而不是普通的任务,只需添加一个 header 'Prefer: IdType="ImmutableId"'。我已经做到了,但它仍然 returns 具有正常 ID 的任务。
当我尝试使用 outlook 事件以及尝试通过 ID 获取 outlook 任务(获取单个任务而不是列出所有任务)时,它工作正常。但是,一旦我尝试使用不可变 id 获取所有任务,它就不起作用。它没有说任何错误它只是 returns 数据但具有正常的 id。
此外,我知道 outlook 任务 API 正在被弃用,但待办事项列表 API 现在不会削减它,我已经尝试过 - 无法检索任何形式的不可变 ID,只是普通 ID。
这是我用来在 NodeJS 中检索所有任务(列出所有任务)的代码:
let response = await client
.api('/me/outlook/tasks?$top=25000')
.header("Prefer", "IdType=\"ImmutableId\"")
.header('Prefer', `outlook.timezone="${timeZone}"`)
.version('beta')
.get();
这很奇怪,因为当尝试通过 ID 获取一项特定任务并设置首选 ID 类型 header 时,它起作用了。
不管怎样,请求是这样的:
列出展望任务(获取所有展望任务)
GET https://graph.microsoft.com/beta/me/outlook/tasks
通过 ID 获取一项特定任务
GET /me/outlook/tasks/{id}
HEADER 用于获取不可变 ID 而不是普通 ID
Prefer: IdType="ImmutableId"
可能有帮助
这是我用来检索具有不可变 ID 的所有事件的代码(这与任务相比有效)
let response = await client.
api('/me/calendar/events?$top=25000')
.header('Prefer', `outlook.timezone="${timeZone}"`)
.header("Prefer", "IdType='ImmutableId'")
.get();
MS Graph official documentation: How to retrieve a list of outlookTasks
MS Graph official documentation: outlookTask resource type
MS Graph official documentation: event resource type
MS Graph official documentation: Get immutable identifiers for Outlook resources
好的,所以我找到了解决方案,但它太荒谬了。如果任何 MS Graph SDK 开发人员看到此问题,请修复它。
而不是这个:
let response = await client
.api('/me/outlook/tasks?$top=25000')
.header("Prefer", "IdType=\"ImmutableId\"")
.header('Prefer', `outlook.timezone="${timeZone}"`)
.version('beta')
.get();
您必须这样做:
let response = await client
.api('/me/outlook/tasks?$top=25000')
.header("Prefer", `IdType="ImmutableId", outlook.timezone="${timeZone}"`)
.version('beta')
.get();
我想设置第二个 Prefer header 会覆盖第一个,因此只发送第二个。不幸的是,我在通过 OpenTypeExtension 实施解决方案后立即发现了这一点。
所以在文档中,它说如果你想获得具有不可变 ID 的任务而不是普通的任务,只需添加一个 header 'Prefer: IdType="ImmutableId"'。我已经做到了,但它仍然 returns 具有正常 ID 的任务。 当我尝试使用 outlook 事件以及尝试通过 ID 获取 outlook 任务(获取单个任务而不是列出所有任务)时,它工作正常。但是,一旦我尝试使用不可变 id 获取所有任务,它就不起作用。它没有说任何错误它只是 returns 数据但具有正常的 id。
此外,我知道 outlook 任务 API 正在被弃用,但待办事项列表 API 现在不会削减它,我已经尝试过 - 无法检索任何形式的不可变 ID,只是普通 ID。
这是我用来在 NodeJS 中检索所有任务(列出所有任务)的代码:
let response = await client
.api('/me/outlook/tasks?$top=25000')
.header("Prefer", "IdType=\"ImmutableId\"")
.header('Prefer', `outlook.timezone="${timeZone}"`)
.version('beta')
.get();
这很奇怪,因为当尝试通过 ID 获取一项特定任务并设置首选 ID 类型 header 时,它起作用了。
不管怎样,请求是这样的:
列出展望任务(获取所有展望任务)
GET https://graph.microsoft.com/beta/me/outlook/tasks
通过 ID 获取一项特定任务
GET /me/outlook/tasks/{id}
HEADER 用于获取不可变 ID 而不是普通 ID
Prefer: IdType="ImmutableId"
可能有帮助
这是我用来检索具有不可变 ID 的所有事件的代码(这与任务相比有效)
let response = await client.
api('/me/calendar/events?$top=25000')
.header('Prefer', `outlook.timezone="${timeZone}"`)
.header("Prefer", "IdType='ImmutableId'")
.get();
MS Graph official documentation: How to retrieve a list of outlookTasks
MS Graph official documentation: outlookTask resource type
MS Graph official documentation: event resource type
MS Graph official documentation: Get immutable identifiers for Outlook resources
好的,所以我找到了解决方案,但它太荒谬了。如果任何 MS Graph SDK 开发人员看到此问题,请修复它。
而不是这个:
let response = await client
.api('/me/outlook/tasks?$top=25000')
.header("Prefer", "IdType=\"ImmutableId\"")
.header('Prefer', `outlook.timezone="${timeZone}"`)
.version('beta')
.get();
您必须这样做:
let response = await client
.api('/me/outlook/tasks?$top=25000')
.header("Prefer", `IdType="ImmutableId", outlook.timezone="${timeZone}"`)
.version('beta')
.get();
我想设置第二个 Prefer header 会覆盖第一个,因此只发送第二个。不幸的是,我在通过 OpenTypeExtension 实施解决方案后立即发现了这一点。