【问题标题】:Azure API management with URL Template Parameters and Function Backend使用 URL 模板参数和函数后端进行 Azure API 管理
【发布时间】: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。

有没有办法让这个工作?

【问题讨论】:

    标签: azure azure-functions azure-api-management


    【解决方案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?}"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-02
        • 2016-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多