1

我在 Azure APIM 中设置了重试策略来跟踪 503 错误。

<backend>
    <retry condition="@(context.Response.StatusCode == 503)" count="3" interval="5" first-fast-retry="true">
        <forward-request buffer-request-body="true" />
    </retry>
</backend>

当后端 api 出现连接问题时,我们尝试 3 次然后放弃重试。

这很好用,但是即使内部错误被捕获为 503,我们也会收到 500 Internal server error 作为响应。

我们如何在出站中获得正确的返回码 503?

4

1 回答 1

0

找到答案,您可以使用政策的 on-error 部分执行此操作

<on-error>
    <set-header name="ErrorMessage" exists-action="override">
        <value>@(context.LastError.Message)</value>
    </set-header>
    <!--
    <set-header name="ErrorSource" exists-action="override">
        <value>@(context.LastError.Source)</value>
    </set-header>
    <set-header name="ErrorReason" exists-action="override">
        <value>@(context.LastError.Reason)</value>
    </set-header>                
    <set-header name="ErrorScope" exists-action="override">
        <value>@(context.LastError.Scope)</value>
    </set-header>
    <set-header name="ErrorSection" exists-action="override">
        <value>@(context.LastError.Section)</value>
    </set-header>
    <set-header name="ErrorPath" exists-action="override">
        <value>@(context.LastError.Path)</value>
    </set-header>
    <set-header name="ErrorPolicyId" exists-action="override">
        <value>@(context.LastError.PolicyId)</value>
    </set-header>
    <set-header name="ErrorStatusCode" exists-action="override">
        <value>@(context.Response.StatusCode.ToString())</value>
    </set-header>
    -->
</on-error>

于 2019-08-07T22:28:30.147 回答