【问题标题】:Unable to return a response using return-response policy in Azure API management无法在 Azure API 管理中使用返回响应策略返回响应
【发布时间】:2023-01-28 02:26:49
【问题描述】:

我有这样的情况: 在出站中,我将检查 GET API 的响应,这是存在 API 策略的地方。如果正文有一个带有 entityStatus 的键,它的值为 0 或 1,如果为 0,则输出简单消息,否则需要发送请求到另一个 API 端点,即 POST API。

我使用了如下 API 策略:

<set-variable name="id" value="" />
    <set-variable name="newRequest" value="@(context.Request.Body?.As<JObject> 
           (preserveContent: true))" />
    <choose>
     <when condition="@(context.Response.StatusCode == 200 && 
     (int)context.Response.Body?.As<JObject>(true)["entityStatus"] == 1)">
    <send-request mode="new" timeout="20" response-variable-name="id" ignore-error="false">
        <set-url>@($"https://api.dev/external/workrequest/wr")</set-url>
        <set-method>POST</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-header name="Authorization" exists-action="override">
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param"))</value>
        </set-header>
        <set-body>@{ var document = (JObject)context.Variables["newRequest"];
                      return document?.ToString();
                    }</set-body>
    </send-request>
    <return-response response-variable-name="id">
        <set-status code="200" reason="OK" />
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-body>@((((IResponse)context.Variables["id"]).Body.As<JObject>()).ToString())</set-body>
    </return-response>
</when>
<when condition="@(context.Response.StatusCode == 200 && (int)context.Response.Body?.As<JObject>(true)["entityStatus"] == 0)">
    <return-response>
        <set-status code="500" reason="VOID" />
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value></set-header>
        <set-body>The record is void</set-body>
     </return-response>
</when>
<otherwise />

当 entityStatus 为 0 时,它返回的响应很好,但当 entityStatus 为 1 时,它返回 400 错误。错误是这样的:

{
"type": "https://httpstatuses.io/400",
"title": "Bad Request",
"status": 400,
"traceId": "00-317b53ba7a76f19b6153ca6ab14c5190-e9c27cf9162e2414-00"
 }

我只需要发送请求的 POST API 的响应,我该怎么做?

【问题讨论】:

    标签: azure azure-api-management string-concatenation policies


    【解决方案1】:

    我有一个解决方案,我正在使用下面的变量来获取请求正文:

    &lt;set-variable name="newRequest" value="@(context.Request.Body?.As&lt;JObject&gt;(preserveContent: true))" /&gt;

    我通过使用更改它:

    set-variable name="newRequest" value="@(context.Response.Body.As&lt;JObject&gt;(preserveContent: true))" /&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 2019-12-24
      • 2019-12-12
      • 2020-01-25
      相关资源
      最近更新 更多