当 API URL 后缀未通过我的 API 管理时,如何强制执行 URL 重定向
How do I enforce a URL redirect when API URL suffix is not passed for my API Management
我已经研究过 Rewrite URL for azure APIM 但我不知道这是否是正确的方法,因为它看起来更适合操作
我有一个 API 管理实例 (https://my-apim.azure-api.net) 有 2 APIs:
AP1 1:- https://my-apim.azure-api.net/api1
AP1 2:- https://my-apim.azure-api.net/api2
我想实现一个案例,如果我的 APIM 在没有 API 后缀的情况下被调用,APIM 重定向到登录页面(例如 https://www.mywebsite.com/login) (例如“/api2”)。
我该怎么做?
根据您的要求,rewrite-uri
政策似乎无法实施。请参考我下面的步骤:
1. 我的 APIM 实例中有两个 apis(与你的相同)。
2.然后点击“添加API”再创建一个api,我们可以用root
来命名。并将您的登录 url 设置为“Web 服务 URL”
3.之后,在新建的apiroot
中添加操作。提供显示,只需在“URL”输入框中键入 /
。
4. 现在你可以测试请求你的 APIM url https://my-apim.azure-api.net
没有 api1/api2
,它将重定向到您的登录页面。
APIM 收到的每个请求都会执行“所有 API”策略。如果收到的请求与 APIM 中注册的任何操作都不匹配,则执行 on-error 部分以及其他情况。请参阅此文档,了解如何处理 404 和其他错误:https://docs.microsoft.com/en-us/azure/api-management/api-management-error-handling-policies,但简而言之,在所有 API 范围内将如下内容添加到 on-error 中应该可以解决问题:
<choose>
<when condition="@(context.LastError.Reason == "OperationNotFound")">
<return-response>
<set-status code="307" reason="Temporary Redirect"/>
<set-header name="Location" exists-action="override">
<value>https://www.mywebsite.com/login</value>
</set-header>
</return-response>
</when>
</choose>
当未提供后缀时,您可以针对具体目标场景实施额外检查,但以上将涵盖 URI in 与任何操作不匹配的所有情况。
我已经研究过 Rewrite URL for azure APIM 但我不知道这是否是正确的方法,因为它看起来更适合操作
我有一个 API 管理实例 (https://my-apim.azure-api.net) 有 2 APIs:
AP1 1:- https://my-apim.azure-api.net/api1
AP1 2:- https://my-apim.azure-api.net/api2
我想实现一个案例,如果我的 APIM 在没有 API 后缀的情况下被调用,APIM 重定向到登录页面(例如 https://www.mywebsite.com/login) (例如“/api2”)。
我该怎么做?
根据您的要求,rewrite-uri
政策似乎无法实施。请参考我下面的步骤:
1. 我的 APIM 实例中有两个 apis(与你的相同)。
2.然后点击“添加API”再创建一个api,我们可以用root
来命名。并将您的登录 url 设置为“Web 服务 URL”
3.之后,在新建的apiroot
中添加操作。提供显示,只需在“URL”输入框中键入 /
。
4. 现在你可以测试请求你的 APIM url https://my-apim.azure-api.net
没有 api1/api2
,它将重定向到您的登录页面。
APIM 收到的每个请求都会执行“所有 API”策略。如果收到的请求与 APIM 中注册的任何操作都不匹配,则执行 on-error 部分以及其他情况。请参阅此文档,了解如何处理 404 和其他错误:https://docs.microsoft.com/en-us/azure/api-management/api-management-error-handling-policies,但简而言之,在所有 API 范围内将如下内容添加到 on-error 中应该可以解决问题:
<choose>
<when condition="@(context.LastError.Reason == "OperationNotFound")">
<return-response>
<set-status code="307" reason="Temporary Redirect"/>
<set-header name="Location" exists-action="override">
<value>https://www.mywebsite.com/login</value>
</set-header>
</return-response>
</when>
</choose>
当未提供后缀时,您可以针对具体目标场景实施额外检查,但以上将涵盖 URI in 与任何操作不匹配的所有情况。