使用 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 管理的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WordPress 配置 Windows Azure 以进行 URL 重写?