Azure API 管理返回 200 状态但没有响应正文
Azure API Management returning 200 status without response body
我已经检查过论坛上可用的其他解决方案,还有这个
我正在尝试调用 return 状态代码(200,401 和 404)的身份验证服务
如果它 returns 200 那么我希望我的请求被转发到后端,否则 return 只有状态代码返回给客户端。
这是我在政策中添加的内容
<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>
现在的问题是 return 在所有情况下都 return 收到响应,当我添加条件策略时我仍然无法 return 从后端收到响应。
任何人都可以告诉如何检查状态代码和 return 仅在 200 的情况下从服务器收到的响应吗?
<send-request/>
策略 return 是 context.Response
类型的响应变量。因此,您可以使用该对象可用的方法和变量。请参阅下面的参考以找到它。
https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions#ref-context-response
对于您的情况,您可以添加 <choose/>
策略并测试
receivedResp.StatusCode != 200
。然后你可以return根据响应
希望对您有所帮助
我已经检查过论坛上可用的其他解决方案,还有这个
我正在尝试调用 return 状态代码(200,401 和 404)的身份验证服务 如果它 returns 200 那么我希望我的请求被转发到后端,否则 return 只有状态代码返回给客户端。
这是我在政策中添加的内容
<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>
现在的问题是 return 在所有情况下都 return 收到响应,当我添加条件策略时我仍然无法 return 从后端收到响应。
任何人都可以告诉如何检查状态代码和 return 仅在 200 的情况下从服务器收到的响应吗?
<send-request/>
策略 return 是 context.Response
类型的响应变量。因此,您可以使用该对象可用的方法和变量。请参阅下面的参考以找到它。
https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions#ref-context-response
对于您的情况,您可以添加 <choose/>
策略并测试
receivedResp.StatusCode != 200
。然后你可以return根据响应
希望对您有所帮助