我目前正在尝试使用 Api 管理将调用重定向到特定端点,以便当有人访问我的端点时
https://ApiManagementResource.azure-api.net/auth/ParseState?state=Splited%7cState
它会被重定向到其他地方(其他地方将位于状态查询字符串中)
当我使用 Google Chrome 浏览器测试端点时,它可以正常工作,但每当我尝试从 Azure 提供的测试控制台测试它时,它都无法执行任务(它甚至没有开始运行)。
这些是我目前的入境政策
<policies>
<inbound>
<base />
<choose>
<when condition="@(context.Request.Url.Query.ContainsKey("state"))">
<return-response>
<set-status code="301" reason="Redirected" />
<set-header name="Location" exists-action="override">
<value>https://Google.com.ar</value>
</set-header>
</return-response>
</when>
<otherwise>
<return-response>
<set-status code="400" reason="Bad Request" />
<set-body>Missing or invalid state parameter on Parse State.</set-body>
</return-response>
</otherwise>
</choose>
</inbound>
<!-- Control if and how the requests are forwarded to services -->
<backend>
<base />
</backend>
<!-- Customize the responses -->
<outbound>
<base />
</outbound>
<!-- Handle exceptions and customize error responses -->
<on-error>
<base />
</on-error>
</policies>
我暂时嘲笑了重定向以避免出现问题,因为这一直失败。
从 Azure Devops 站点进行测试时,如果我传递
state
查询参数,它总是无法执行。如果没有,那么我会收到 400 响应(如预期)。
如果我从入站策略中删除以下内容
<set-header name="Location" exists-action="override">
<value>https://Google.com.ar</value>
</set-header>
然后我可以测试它完美地通过
state
查询字符串参数(但当然,它不会将我重定向到任何地方)。
失败时出现的错误是以下弹出窗口
我不认为我做错了什么,因为它可以在浏览器中运行,但这是我第一次使用 Api 管理,所以也许我是错的
有什么帮助吗?
APIM 测试控制台似乎不支持自动重定向。我相信,发生这种情况是因为测试控制台在测试过程中不处理重定向,这与浏览器和邮递员不同。
如果您将状态代码更改为 300 或 304,您将能够使用 APIM 实例提供的测试控制台,但它只会返回响应。
我已将政策更改为如下所示-
<policies>
<inbound>
<base />
<choose>
<when condition="@(context.Request.Url.Query.ContainsKey("state"))">
<return-response>
<set-status code="300" reason="Redirected" />
<set-header name="Location" exists-action="override">
<value>https://Google.com.ar</value>
</set-header>
</return-response>
</when>
<otherwise>
<return-response>
<set-status code="400" reason="Bad Request" />
<set-body>Missing or invalid state parameter on Parse State.</set-body>
</return-response>
</otherwise>
</choose>
</inbound>
</policies>
如果您希望重定向按预期工作,建议使用邮递员或浏览器进行测试。