首页 > 解决方案 > Azure API 管理集状态代码策略未按预期工作

问题描述

我正在使用设置状态代码策略,其中我将返回状态代码和相应的状态原因,如果我尝试点击 api,则在运行时和开发人员门户中获取原因,我能够接收状态代码预期的原因消息,但如果我通过托管服务调用,我只会得到状态代码,而我没有得到相关的原因消息

这并不存在于我拥有的所有 APIM 实例中,仅在特定实例中

如果我从开发者门户尝试,我会得到状态原因

注意:状态原因中的消息变量是在运行时从命名值中获取的


代码:

        <when condition="@(!14==14))">
          <return-response>
            <set-status code="410" reason="@(context.Variables.GetValueOrDefault<string>("Message"))" />
            <set-header name="Cache-Control" exists-action="override">
               <value>max-age=0, no-cache, no-store, must-revalidate, proxy-revalidate</value>
            </set-header>
          </return-response>
        </when>

邮递员呼叫: 未收到原因仅代码 参考:黄色突出显示的框 在此处输入图像描述


开发者控制台:黄色高亮框同时显示代码和消息 在此处输入图像描述

标签: azureazure-api-management

解决方案


由于您在 APIM 的不同实例之间得到不同的行为,因此问题似乎很可能是在未返回原因值的实例上未正确设置“消息”变量。

我无法完全复制这一点。当使用像 410 这样的已知状态代码时,我测试的所有 APIM 实例似乎都将“Gone”设置为未指定的原因。但是由于状态码未知,没有返回任何原因。我没有看到新旧 APIM 实例之间的行为有任何差异。


推荐阅读