c# - 调用 Google Directory API 修补用户密码时出现间歇性 412 错误
问题描述
我的应用程序的主要功能是使用 Google 的 Google.Apis.Admin.Directory.directory_v1 nuget 包更改 Google G-Suite 用户的密码。
API 调用在 95% 的时间都有效(并重置目标用户的密码),但间歇性地,API 调用会抛出带有消息文本的异常:
前提条件失败[412]错误[消息[前提条件失败]位置[If-Match - 标头]原因[conditionNotMet]域[全局]]
我做了很多研究,似乎有一个客户端指定的前提条件包含在一个(REST?)API 正在向 Google API 服务器发出的调用中,并且服务器正在确定该条件不是遇到(见 https://www.rfc-editor.org/rfc/rfc7232#section-4.2)或被更改对象的状态不好(https://developers.google.com/calendar/v3/errors)。奇怪的是,几乎所有时间都可以正常工作,但时不时会失败。看起来确实是某种基于资源的错误(最近提交的调用太多,域中许可的用户太多)或者可能是错误数据(密码错误或丢失,错误用户)甚至权限(用户在一个组中) /OU 无法管理)。但是错误消息没有给出任何继续,我主要排除了最明显的可能性。我用谷歌搜索了确切的消息,发现很多人都有类似的投诉,但没有记录在案的原因。
原始更正:我能够使用 Fiddler 捕获 REST 调用(配置了 https 捕获),但是在捕获时我无法重现原始错误,因此它没有多大帮助。
有关如何重现和/或解决问题的任何建议?
这是代码(请忽略任何明显的拼写错误——我不得不从几个来源中剪切/粘贴/合并来组装一个简单的小例子)——真正的代码几乎在所有时间都有效:
{
userEmail = googleUser + "@" + domain; // e.g. BobSmith@myGoogleDomain.com
// service is an instance of Google.Apis.Admin.Directory.directory_v1.DirectoryService
var userget = service.Users.Get(userEmail);
User userob = userget.Execute();
userob.ChangePasswordAtNextLogin = false;
userob.Password = password;
patchRequest=service.Users.Patch(userob, userEmail);
patchRequest.Execute();
}
catch (Exception e)
{}
解决方案
推荐阅读
- sql - 查询以检测前一天物品位置的变化(RFID 跟踪)
- html - 使用 go 解析 HTML 中的标签
- python - 根据另一个数组中的可用范围调整一个 numpy 数组
- python - Heroku中的python套接字服务器
- laravel - 访问特定嵌套页面时,VueJS / Laravel 的相对路径不起作用(路由器历史记录开启)
- php - 有关此问题专辑照片 laravel 画廊的更多信息。更新相册中的照片时出错
- javascript - 删除音频文件之间的时间
- r - 如何将 facet_grid 覆盖到 R 中的 gg_map 上(有可能做到这一点吗?)
- amazon-s3 - 我可以删除 Athena 在 S3 中创建的“createPartitionOutput”对象吗?
- java - Microprofile JWT web.xml 返回 200 而不是 401