Azure APIM配置URL模板参数路由至Function后端404问题求解
问题根因
Azure APIM默认会将前端请求的完整路径直接追加到后端服务地址后转发,你前端路径中的/123被自动拼接到了Azure Function的地址后面,而你的Function没有配置对应路径参数的路由,因此返回404错误。
解决方案
最直接的处理方式是在入站策略中新增rewrite-uri配置,重写转发到后端的请求路径,去掉不需要的路径参数部分,修改后的入站策略如下:
<inbound> <base /> <set-query-parameter name="productId" exists-action="override"> <value>@(context.Request.MatchedParameters["productId"])</value> </set-query-parameter> <!-- 重写后端请求路径,template值替换为你Function实际的触发路径 --> <rewrite-uri template="/api/product-function" copy-unmatched-params="false" /> <set-backend-service id="apim-generated-policy" backend-id="product-function" /> </inbound>
配置说明:
template字段填写后端Function实际可以正常访问的路径,不需要携带{productId}参数copy-unmatched-params设为false,避免未匹配的路径参数被自动追加到后端路径中
配置完成后,后端Function收到的请求地址会变为https://my-function.azurewebsites.net/api/product-function?productId=123,即可正常返回结果。
备选方案
你也可以直接在APIM的API操作配置界面,将该接口对应的后端操作路径模板设置为/product-function(不包含{productId}参数),无需修改策略也可以实现同样的效果。
内容的提问来源于stack exchange,提问作者NSjonas
相关产品推荐
相关产品推荐

