问题描述
使用Updating a user Microsoft Graph Beta时出现以下错误。权限应该不是问题,因为我正在使用以下权限:user.readwrite.all
,directory.readwrite.all
。另外,HireDate
的类型为DateTimeOffSet
,我是通过converting本地DateTime
到DateTimeOffSet
得到的。因此,这也不是问题。 问题:错误的可能原因是什么?如何解决?
错误:
Microsoft.Graph.ServiceException
HResult=0x80131500
Message=Code: BadRequest
Message: The request is currently not supported on the targeted entity set
Inner error:
AdditionalData:
date: 2020-08-31T13:59:10
request-id: 4b62576f-6572-414c-b9ef-07ea9a61c101
ClientRequestId: 4b62576f-6572-414c-b9ef-07ea9a61c101
代码:
private async void DataGridUserUpdateButton_Click(object sender,RoutedEventArgs e)
{
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
User user = (sender as Button).DataContext as User;
string id = user.UserPrincipalName;
var user = new User
{
Department = "IT",displayName = "Bob Doe",HireDate = new DateTime(2020,8,31,2,30,0),JobTitle = "IT Manager"
};
await graphClient.Users[sId]
.Request()
.UpdateAsync(user);
}
解决方法
根据一些测试,我遇到了与您相同的问题。我使用client_credential授予流和用户名/密码授予流(并添加足够的权限)在代码中对其进行了测试,但没有一个成功。然后,我在图形浏览器中对其进行了测试,但也失败了。似乎属性hireDate
无法成功更新。
关于一个词,我发现了另一个可以使用的属性,可以使用employeeHireDate
。我已经测试过更新此属性,它可以正常工作。当我们使用beta图形api时,此属性才存在,而在v1.0 user properties和beta user properties文档中都找不到。
要更新代码中的employeeHireDate
,请参考以下代码:
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = new User
{
AdditionalData = new Dictionary<string,object>()
{
{"employeeHireDate","2019-01-01T00:00:00Z"}
}
};
await graphClient.Users["userId"]
.Request()
.UpdateAsync(user);
顺便说一句,您需要注意Beta版中的属性,因为将来可能会更改。
================================== 更新 ===== ============================
,到目前为止,我们可以通过Graph API更新雇用日期(雇员雇用日期)属性
补丁 https://graph.microsoft.com/beta/users/userid
{"employeeHireDate":"2020-01-02T00:00:00Z"}