C# Google SDK 更新或补丁用户

C# Google SDK Update or Patch User

使用 google Admin SDK for C# 更新用户时遇到问题。

https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/update

This method supports patch semantics, meaning you only need to include the fields you wish to update. Fields that are not present in the request will be preserved, and fields set to null will be cleared.

这与补丁不同,因为补丁不会清除空字段,只会更新有值的字段。

问题是我必须将完整的 Google.Apis.Admin.Directory.directory_v1.Data.User class 传递给函数,该函数将包含我不想清除的偶数属性的 null。

示例:

public User UpdateUser(Google.Apis.Admin.Directory.directory_v1.Data.User gUser)
    {
        UsersResource.UpdateRequest userUpdateRequest = _service.Users.Update(gUser, gUser.Id);
        User updatedUser = userUpdateRequest.Execute();

        return updatedUser;
    }

有没有办法在执行之前修改UpdateRequest中的Body?

编辑: UpdateRequest 有一个 ModifyRequest 属性 看起来像这样 我只是不知道如何使用它,有什么想法吗?

public Action<HttpRequestMessage> ModifyRequest { get; set; }

至于将事物更新为 Null 的概念,这不是 PATCH 可以完成的事情。我建议将其设置为空字符串。

如果这就是您当前正在做的事情,您也不应该发送完整的用户对象。我将假设您已经完成 users.list 以找到您想要更新的用户并更改该用户中的某些内容,说出名称。然后您只需将完整的用户对象提交给您的方法

UpdateUser(Google.Apis.Admin.Directory.directory_v1.Data.User gUser)

这不会起作用,因为您作为 update/patch 的一部分发送的某些字段实际上不可写。

您应该做的是创建一个新的用户对象来更改您想要的任何内容

public User MakeUserAdmin(Google.Apis.Admin.Directory.directory_v1.Data.User gUserId)
    {

     var updateFields= new Google.Apis.Admin.Directory.directory_v1.Data.User();
     change.IsAdmin = true;
     change.Addresses = "";  // will set it to empty yes not null but the best you can do with this api.

     UsersResource.UpdateRequest userUpdateRequest = _service.Users.Update(updateFields, gUserId);
        User updatedUser = userUpdateRequest.Execute();    
        return updatedUser;
    }

请注意您如何只需要创建一个新对象并仅更新您需要的字段然后发送它。

不要尝试更新每个字段,只更新您知道已更改的字段。也不要在不可写的对象中包含id。