通过 MS 图形 API 更新用户的技能属性失败



我正在尝试更新用户的"技能"属性(注意:不使用Me端点(。这将返回一个异常。我正在使用 .NET SDKGraphServiceClient来执行此操作,使用的是最新的 3.6.0 版本。

要重现

重现该行为的步骤,请使用以下示例代码:

var user = new User()
{
Skills = skills
};
await graphClient.Users[userId].Request().UpdateAsync(user);

预期行为

我希望此代码向图形 API 终结点发送 POST 请求,并且该请求应更新给定使用的技能属性,前提是已向经过身份验证的服务授予 Azure AD 中的User.ReadWrite.All权限(它已授予

(。相反,图形终结点返回以下错误:

"error": {
"code": "-1, Microsoft.SharePoint.Client.InvalidClientQueryException",
"message": "A type named 'Microsoft.SharePoint.user' could not be resolved by the model. When a model is available, each type name must resolve to a valid type.",
"innerError": {
"request-id": "1948a4ec-60fd-4212-873f-3d34f62f5601",
"date": "2020-05-25T09:35:33"
}
}
}

不知道为什么这行不通。我遵循了示例,尽管这些示例没有特别提到更新Skills属性,但您希望它对所有属性都同样有效。当我从更新的User对象中省略该属性时,我不会返回错误(但显然在这种情况下没有任何更新(。

在 baywet 提到的 v1 中修复之前,您还可以使用以下方法作为您的方案的解决方法。

默认情况下,图形客户端将 odata.type 添加为 microsoft.graph.user,SharePoint 不需要该值。您可以将 oDataType 更改为"https://graph.microsoft.com/v1.0/$metadata#users/$entity"或"Microsoft.SharePoint.user"或 null,以便 sharepoint 可以理解该类型。

您可以通过以下方式设置 o数据类型

var user = new User()
{
Skills = skills
};
user.ODataType = "https://graph.microsoft.com/v1.0/$metadata#users/$entity";
await graphClient.Users[userId].Request().UpdateAsync(user);

这是一个持续存在的问题,正在服务中解决。测试版应该已经修复,v1 正在进行中。

作为解决方法,您可以使用测试版,也可以在没有 odata 类型的情况下手动创建请求。