如何从C#

时间:2017-11-07 15:37:42

标签: c# microsoft-graph

我试图获取用户个人资料图片的内容,但我发现我必须调用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();

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

我在Graph Explorer中尝试了相同的请求。 1.0不起作用,但Beta工作。

3 个答案:

答案 0 :(得分:4)

Azure AD Graph API使用api-version查询参数。这是一个与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而不会出现问题。

答案 1 :(得分:1)

我认为您仍然在调用V1端点。实际上,Microsoft Graph .NET Client Library目前不支持Beta端点。更多信息here

答案 2 :(得分:0)

现在有一个官方的Graph API beta客户端: https://github.com/microsoftgraph/msgraph-beta-sdk-dotnet