使用 URL 模板参数和函数后端进行 Azure API 管理

Posted

技术标签:

【中文标题】使用 URL 模板参数和函数后端进行 Azure API 管理【英文标题】:Azure API management with URL Template Parameters and Function Backend 【发布时间】:2021-09-10 22:45:26 【问题描述】:

我正在尝试使用路由到 Azure 函数的 url 参数在 Azure API 管理上设置一个端点。

例如:GET my-api-gateway.azure-api.net.com/product/productId

我的入站策略只是设置后端并将模板参数移动到查询参数。

    <inbound>
        <base />
        <set-query-parameter name="productId" exists-action="override">
            <value>@(context.Request.MatchedParameters["productId"])</value>
        </set-query-parameter>
        <set-backend-service id="apim-generated-policy" backend-id="product-function" />
    </inbound>

但是,当我调用 my-api-gateway.azure-api.net.com/product/123 时,/123 也会传递给后端函数 url

https://my-function.azurewebsites.net/api/product-function/123?productId=123

导致 404。

有没有办法让这个工作?

【问题讨论】:

【参考方案1】:

一种解决方法是添加到后端的路由,如您在自己的答案中所示。但是,如果你不能这样做,那么回答你原来的问题是引入一个 uri 重写:

<inbound>
    <base />
    <rewrite-uri template="/product-function" copy-unmatched-params="false" />
    <set-query-parameter name="productId" exists-action="override">
        <value>@(context.Request.MatchedParameters["productId"])</value>
    </set-query-parameter>
    <set-backend-service id="apim-generated-policy" backend-id="product-function" />
</inbound>

【讨论】:

【参考方案2】:

问题是我还需要设置 routes 我的函数本身。

在我的function.json 中,我添加了以下内容以匹配我的 API,现在它可以工作了:

 "route": "product-function/productId?"

【讨论】:

以上是关于使用 URL 模板参数和函数后端进行 Azure API 管理的主要内容,如果未能解决你的问题,请参考以下文章

将通知模板从应用后端注册到 Azure 通知中心

如何使用 WordPress 配置 Windows Azure 以进行 URL 重写?

在 Azure 函数中解析 URL

如何将 url 参数传递给视图以供其他类函数和模板使用

Django框架中path及re_path中name参数的使用和模板渲染(八)

为啥 Power Query 调用 Azure API 管理后端 URL?