当 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 与任何操作不匹配的所有情况。