重写Azure API管理服务中所有API操作的URL

问题描述 投票:0回答:1

我有一个 Web api,其路径为:

<WebApiHost>/api/v1/operation1
<WebApiHost>/api/v1/operation2
<WebApiHost>/api/v1/operation3

在我的 Azure API 管理服务中,我希望前端是:

<ApiManagementHost>/api-name/v1/operation1
<ApiManagementHost>/api-name/v1/operation2
<ApiManagementHost>/api-name/v1/operation3

实现这一目标的最佳方法是什么?

我尝试通过导入 Open API 规范文件在 API 管理中创建 API,并将 API 后缀设置为“api-name”并在路径中使用版本标识符“v1”来实现此目的,然后就消失了通过每个操作前端并删除来自开放 API 定义的路径的“/api/v1/”部分。然后我尝试添加适用于所有操作的入站策略,例如:

<inbound>
    <choose>
        <when condition="@(context.Request.OriginalUrl.Path.StartsWith("/test/pmi-quotes/v1/"))">
            <rewrite-uri template="/api/v1/@(context.Request.OriginalUrl.Path.Replace(&quot;/test/pmi-quotes/v1/&quot;, &quot;&quot;))" />
        </when>
        <otherwise>
            <rewrite-uri template="/api/@(context.Request.OriginalUrl.Path)" />
        </otherwise>
    </choose>
    <base />
</inbound>

其想法是将“/api-name/v1/{operation-path}”请求重写为“/api/v1/{operation-path}”

但这会返回 404。查看跟踪,似乎重写规则未解析,因为 URL 包含表达式:

forward-request (0.108 ms)
{
    "message": "Request is being forwarded to the backend service. Timeout set to 300 seconds",
    "request": {
        "method": "GET",
        "url": "<WebApiHost>/api/v1/@(context.Request.OriginalUrl.Path.Replace(\"/api-name/v1/\", \"\"))",
        "headers": [
azure url-rewriting azure-api-management
1个回答
0
投票

第 1 步:使用

API URL Suffix
= api-name
Web service URL
= /api

创建 API

API Settings

第 2 步:在此 API 中,使用

URL
= /*

创建一个操作

Operation Frontend Settings

就是这样,不需要额外的政策。

<ApiManagementHost>/api-name/v1/operation1
将被重定向到
<WebApiHost>/api/v1/operation1
,依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.