1

我已经检查了论坛上可用的其他解决方案,并且 当从 azure APIM 调用返回空响应正文和状态代码 200 时,这个也是 REST API 服务

我正在尝试调用返回状态代码(200,401 和 404)的身份验证服务,如果它返回 200,那么我希望将我的请求转发到后端,否则仅将状态代码返回给客户端。

这是我在我的政策中添加的

<policies>
<inbound>
    <base />
    <check-header name="username" failed-check-httpcode="401" failed-check-error-message="unauthorised" ignore-case="true" />
    <cors>
        <allowed-origins>
            <origin>*</origin>
        </allowed-origins>
        <allowed-methods>
            <method>GET</method>
            <method>POST</method>
        </allowed-methods>
    </cors>
    <send-request mode="new" response-variable-name="receivedResp" timeout="20" ignore-error="true">
        <set-url>https://authenticate1.azurewebsites.net/auth</set-url>
        <set-method>GET</set-method>
        <set-header name="username" exists-action="override">
            <value>@(context.Request.Headers.GetValueOrDefault("username",""))</value>
        </set-header>
        <set-body />
    </send-request>
    <return-response response-variable-name="receivedResp" />
</inbound>
<backend>
    <base />
</backend>
<outbound>
    <base />
</outbound>
<on-error>
    <base />
</on-error>

现在的问题是返回在所有情况下都返回收到的响应,当我添加条件策略时,我仍然无法返回从后端收到的响应。

任何人都可以告诉如何检查状态代码并返回从服务器收到的响应,仅在 200 的情况下?

4

1 回答 1

1

<send-request/>策略返回类型为 的响应变量context.Response。因此,您可以使用该对象可用的方法和变量。请参阅以下参考以找到它。 https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions#ref-context-response

在您的情况下,您可以添加<choose/>策略并测试 receivedResp.StatusCode != 200. 然后您可以根据响应返回。

希望能帮助到你

于 2019-08-19T13:37:04.783 回答