Google Tasks API BatchRequest 触发“批量请求中的重复请求 ID”

2024-01-09

从 9 月 13 日开始,Google Tasks BatchRequest 更新工作流程将在多年来保持稳定的应用程序中触发 400 错误返回“批量请求中的重复请求 ID”。我在请求中找不到任何指示重复请求 ID 的内容。有人知道怎么回事吗?谷歌改变了什么吗?

这是我在发送简单的批处理任务插入请求时收到的响应副本......

[{
  "error": {
    "code": 400,
    "message": "Duplicate Request ID in Batch Request: ",
    "errors": [
      {
        "message": "Duplicate Request ID in Batch Request: ",
        "domain": "global",
        "reason": "badRequest"
      }
    ],
    "status": "INVALID_ARGUMENT"
  }
}]

UPDATE

在调查这个问题时,我发现 Google 做出了更改,现在需要Content-ID每个批量请求项上的标头。使用 .Net 时当前未设置此标头Google.Apis.Requests.BatchRequest class.

为了解决这个问题,我能够创建一个新的 Google.Apis.Requests.BatchRequest 本地实现,并注入一个“Content-ID”标头,然后创建每个请求条目。

private static long _id = 0;

[VisibleForTestOnly]
internal static async Task<HttpContent> CreateIndividualRequest(IClientServiceRequest request)
{
    HttpRequestMessage requestMessage = request.CreateRequest(false);
    string requestContent = await CreateRequestContentString(requestMessage).ConfigureAwait(false);

    var content = new StringContent(requestContent);
    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/http");
    content.Headers.Add("Content-ID", (_id++).ToString());
    return content;
}

感谢您解决这个问题!这Content-ID标题解决了问题。

但不是创建一个新的实现Google.Apis.Requests.BatchRequest你可以注入一个HttpExecuteInterceptor进入底层服务,然后由批处理请求调用。

创建拦截器:

public class GoogleBatchInterceptor : IHttpExecuteInterceptor
{
    public Task InterceptAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (request.Content is not MultipartContent multipartContent)
        {
            return Task.CompletedTask;
        }
        
        foreach (var content in multipartContent)
        {
            content.Headers.Add("Content-ID", Guid.NewGuid().ToString());
        }

        return Task.CompletedTask;
    }
}

将拦截器添加到服务中:

CalendarService calendarService = CreateTheCalendarService();
calendarService.HttpClient.MessageHandler.AddExecuteInterceptor(new GoogleBatchInterceptor());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Tasks API BatchRequest 触发“批量请求中的重复请求 ID” 的相关文章

  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • 无法使用c#更改视频捕获分辨率

    我正在尝试使用 C 中的 DirectShowNet 更改默认网络摄像头分辨率 据我所知 我需要通过调用 windows win32 api dll 中内置的 VideoInfoHeader 类来更改它以进行 avi 捕获 我有来自 Dir
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • C# 中 PKCS11Interop 库的线程安全使用 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 PKCS11Interop 在 HSM 内执行密钥管理操作 我使用的 HSM 是 Thales PCI Express 下面是
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 意外的 const 引用行为

    include
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 使用任务的经典永无止境的线程循环?

    给出了一个非常常见的线程场景 宣言 private Thread thread private bool isRunning false Start thread new Thread gt NeverEndingProc thread S

随机推荐

  • 使用 jQuery .appendTo 后执行 CSS3 动画

    我想用 appendTo 修改元素的 DOM 位置 完成后 我需要使用 CSS3 为元素设置动画 该元素不会产生动画 而是捕捉到新的 CSS 样式 JavaScript run click function imageOriginal ap
  • xcode 构建错误:项目不包含方案

    我正在开发一个离子应用程序 但是当我尝试构建它时 它给了我以下错误 xcodebuild error The project named SnapHome does not contain a scheme named SnapHome T
  • 每个 CPU 的线程实际限制是多少?

    我一直在玩弄线程 试图将一些限制推向极致 为了我自己的娱乐 我知道线程池默认为 25 个线程 并且可以增加到 1000 个 根据 MSDN 但是 每个 CPU 核心的线程数的实际限制是什么呢 在某些时候 上下文切换会比线程保存造成更多的瓶颈
  • 为什么在没有“self”且没有装饰器的情况下声明 Python 类的方法不会引发异常?

    我认为以下代码会导致错误 因为据我所知 Python 类中的方法必须将 self 或任何其他标签 但按照约定为 self 作为其第一个参数 或者 cls 或类似的如果 classmethod使用装饰器 或者不使用装饰器 staticmeth
  • CSS 溢出 - 未按预期工作

    http jsfiddle net bSnaG http jsfiddle net bSnaG 在我看来 上面的例子应该看起来像一个灰色的盒子 x不越过边缘并且 y探出底部 但事实并非如此 显然是这样的overflow x hidden c
  • data.table 基于日期范围合并

    我有两张桌子 policies and claims policies lt data table policyNumber c 123 123 124 125 EFDT as Date c 2012 1 1 2013 1 1 2013 1
  • GSM SM5100B C M E E R R O R:4 错误

    我正在使用 Arduino 来控制 SM5100B GSM 设备 除了当我想在收到另一条短信后发送短信时 一切正常 我明白了 错误代码 确定 gt C M G S 2 5 确定 C M E E R O R 4 我处理上述收到的短信的代码 i
  • grpc:调用是半关闭错误

    我正在使用 Google Cloud Platform Speech API 我正在使用示例源进行开发 https github com GoogleCloudPlatform android docs samples tree maste
  • 在表单提交事件上打开 URL - Google 应用程序脚本

    我正在使用 Serge insas 提供的示例代码 用于打开 URL 的 Google Apps 脚本 https stackoverflow com questions 10744760 google apps script to ope
  • 将 List> 转换为 IList>

    我写了一个方法是public List
  • 用于创建格式化 XLSX 电子表格的 JS 库

    我目前正在使用 JS 创建通用电子表格https www npmjs com package xlsx https www npmjs com package xlsx 这可以很好地生成一个通用电子表格来显示我的数据 但是 我想添加一些功能
  • 将 PST 格式的日期和时间转换为 UTC 格式

    我有一个变量 str 字符串类型 其值为 28 Nov 2013 09 15 AM 如何将其转换为 UTC 格式 str 变量中的上述时间采用 PST 因此 UTC 应该是 8超过这个时间 我正在使用 flex 2 下面发现以下代码不起作用
  • 居中浮动 DIV

    我正在尝试将 3 个浮动 DIV 居中 如果我给父级 DIV 就可以了显示 表格 和子 DIV显示 单元格 它将像一张桌子一样工作 还有别的办法吗
  • AttributeError:“模块”对象没有属性“utcnow”

    当我输入简单的代码时 import datetime datetime utcnow 我收到错误消息 Traceback most recent call last File
  • webpack 构建后运行命令

    我想运行 webpack watch模式 并在每次构建后运行 shell 命令 将一个文件夹同步到另一个文件夹 I found 这个插件 https www npmjs com package on build webpack每次构建后都会
  • 防止休眠 StaleObjectStateException 发生

    我对 Spring 控制器方法有疑问 它实际上对同一实体进行了两次更新 这导致陈旧对象状态异常 问题是 当我检索 Member 实例时 我认为它会以某种方式导致更新 请参阅 UPDATE ONE 的广告实例 这实际上是不需要的 以及当我更新
  • 替换 SQL 中字符串中第一次出现的子字符串

    我必须从 temp 表中获取数据 其中包含 或 ccc 或 bbb 或 aaa 之类的内容 我想将第一次出现的内容替换为空间以获得类似 ccc 或 bbb 或 aaa 之类的内容 我正在尝试一些东西并替换 但它们似乎没有给我带来想要的结果
  • Django 中“max_length”的最大大小是多少?

    这是我的模型 class Position models Model map models ForeignKey Map primary key True members models CharField max length 200 La
  • urllib2 和 json

    谁能指出一个教程 向我展示如何使用 urllib2 执行 POST 请求 数据为 JSON 格式 仅当服务器不费心检查内容类型标头时 梅萨的答案才有效 如果您希望它真正起作用 您需要指定一个内容类型标头 这是经过修改以包含内容类型标头的 M
  • Google Tasks API BatchRequest 触发“批量请求中的重复请求 ID”

    从 9 月 13 日开始 Google Tasks BatchRequest 更新工作流程将在多年来保持稳定的应用程序中触发 400 错误返回 批量请求中的重复请求 ID 我在请求中找不到任何指示重复请求 ID 的内容 有人知道怎么回事吗