我已经检查了论坛上可用的其他解决方案,这也是 REST API service when called from azure APIM returning empty response body with Status code 200
我正在尝试调用身份验证服务,该服务返回状态代码(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>
现在的问题是,在所有情况下,return都会返回收到的响应,当我添加条件策略时,我仍然无法返回从后端收到的响应。
在只有200的情况下,谁能说出如何检查状态码并返回从服务器收到的响应?
答案 0 :(得分:1)
bash -c
策略返回类型为COMMAND_ARRAY=(docker run --rm=true --net=host --user="$(id -u)":"$(id -g)" -e BUILD_NUMBER=${BUILD_NUMBER:=-1} -e TERM=${TERM} ${EXTRA_DOCKER_COMMANDS} ${TERMINAL_COMMAND} --workdir="$(pwd)" --volume=/tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY --volume=/etc/passwd:/etc/passwd --volume=/etc/group:/etc/group $GROUP_ADDS --volume=/var/run/docker.sock:/var/run/docker.sock --volume=/etc/localtime:/etc/localtime --ulimit nofile=262144 --volume="${HOME}":"${HOME}" --volume="${GITROOT}":"${GITROOT}" ${IMAGE_NAME}:${VERSION} "$@")
"${COMMAND_ARRAY[@]}"
的响应变量。因此,您可以使用该对象可用的方法和变量。请参阅以下参考资料进行查找。
https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions#ref-context-response
根据您的情况,您可以添加<send-request/>
策略并测试
context.Response
。然后您可以根据响应返回。
希望有帮助