重试请求以“内容长度不匹配”结束

问题描述 投票:0回答:1

我的问题是这样的:

我有一个Azure APIM,我已经创建了一个API并添加了后端重试策略,如下所示。

<backend>
    <retry condition="@("{{Transient-ErrorCode}}".Contains(Convert.ToString(context.Response.StatusCode)))" count="3" interval="5" first-fast-retry="false">
        <forward-request />
    </retry>
</backend>

服务器第一次返回成功(状态码:200),当它启动重试时遇到以下情况(我正在重试它的成功,因为测试重试工作正常。)。

forward-request (1.326 ms)
{
"messages": [
    "Content length mismatch",
    "Content length mismatch"
    ]
}

请帮助您的想法/经验。

azure azure-api-management retrypolicy
1个回答
3
投票

这是因为默认情况下,客户端发送的请求不会缓存在内存中,而是从客户端流向后端。因此,当需要重试请求请求时,有效负载不存在。我假设你只有有身体的请求才有问题。

要解决此问题,首先需要缓存请求正文:

<inbound>
    <set-variable name="body" value="@(context.Request.Body.As<string>(preserveContent: true))" />
</inbound>
<backend>
    <retry condition="@("{{Transient-ErrorCode}}".Contains(Convert.ToString(context.Response.StatusCode)))" count="3" interval="5" first-fast-retry="false">
        <set-body>@((string)context.Variables["body"])</set-body>
        <forward-request />
    </retry>
</backend>
© www.soinside.com 2019 - 2024. All rights reserved.