我试图更新一个用户的 "技能 "属性(注意:不是使用Me端点)。这将返回一个异常。我使用的是.NET SDK GraphServiceClient
使用最新的3.6.0版本来进行。
要重现
重现该行为的步骤,请使用以下示例代码。
var user = new User()
{
Skills = skills
};
await graphClient.Users[userId].Request().UpdateAsync(user);
预期行为
我希望这段代码能向Graph API端点发送一个POST请求,该请求应该更新给定使用的Skills属性,前提是经过验证的服务已经被授予了 User.ReadWrite.All
权限(它拥有该权限)。
相反,Graph 端点正在返回以下错误。
"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.comv1.0。$metadata#users$entity "或 "Microsoft.SharePoint.user "或null,这样Sharepoint就可以理解该类型。
您可以通过以下方式设置oDatatype
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类型的请求。