c# - 如何从 C# 调用 Microsoft Graph Beta API

标签 c# microsoft-graph-api

我尝试获取用户个人资料图片的内容,结果发现我必须调用 Beta 版本,因为当前版本给出以下错误消息:

"code": "GetUserPhoto",
"message": "The operation is not supported."

因此,我尝试切换到 Beta,这是我用 C# 编写的代码,但它不起作用:

Microsoft.Graph 1.6.2

List<QueryOption> options = new List<QueryOption>
{
    new QueryOption("$api-version", "beta")
};

var pictureStream = await graphClient.Me.Photo.Content.Request(options).GetAsync();

我收到了同样的错误消息。

我在图形浏览器中尝试了相同的请求。 1.0 不能用,但 Beta 可以。

最佳答案

api-version 查询参数由 Azure AD Graph API 使用。这是与 Microsoft Graph 不同的 API。有很多功能重叠(Azure AD Graph 正在慢慢迁移到 Microsoft Graph),但它们使用完全不同的实体和调用约定。

为了使用 Microsoft Graph .NET Client Library 调用 /beta 端点,您需要更改客户端的BaseUrl:

graphClient.BaseUrl = "https://graph.microsoft.com/beta";
var pictureStream = await graphClient.Me.Photo.Content.Request().GetAsync();

有关 /beta 端点的一些重要说明:

  1. 它不受支持,也不适合生产。所以不要这样做。或者至少不要告诉任何人,如果它停止工作也不要调用支持人员。 ;-)

  2. .NET 客户端使用根据生产元数据构造的对象。这意味着在 /beta 中添加的任何实体、操作或属性都不存在于 SDK 附带的模型中。

  3. .NET 客户端将忽略 Microsoft Graph 返回的任何它不希望看到的值。因此,如果端点返回未包含在生产元数据中的属性(请参阅#2),它将被忽略。

    只要您仅使用 /beta 来获得功能,但仍期望 /v1.0 结果,它应该可以正常工作。例如,照片仅查看 v1.0 中的 Exchange,但同时查看 Exchange Active Directory,但仍然返回相同的结果。理论上,这意味着您应该能够毫无问题地将 /beta 替换为 /v1.0

关于c# - 如何从 C# 调用 Microsoft Graph Beta API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47161815/

相关文章:

azure - 无法使用 O365 API 的刷新 token 生成访问 token

c# - 流式结构化文本输入

c# - 强制 HttpWebRequest 和 ClientWebSocket 使用 TLS 1.2

java - 将 0x00 等 unicode 字符转换为字节

azure-active-directory - InvalidAuthenticationToken - CompactToken 解析失败,错误代码为 : -2147184105

microsoft-graph-api - 在生产环境中使用MS graph API

azure - Webhook Ms Graph 监听群组对话

c# - System.Array' 不包含 'Count' 的定义

c# - 将 DbSet 和查询结果分配给同一个变量

node.js - 使用请求的 Microsoft-Graph token 太小