使用backend-id时添加send-request导致Backend URL未生成的问题求助
问题解决:Azure APIM中send-request结合backend-id报错的处理
问题核心是send-request策略不会自动继承set-backend-service配置的后端服务地址,需要手动在send-request内部指定完整的后端请求URL。
解决步骤
- 利用APIM内置变量
context.BackendServiceUrl获取通过backend-id绑定的后端基础URL - 在
send-request的url属性中拼接rewrite-uri指定的路径,形成完整请求地址
修改后的可用策略
<inbound> <base /> <set-backend-service backend-id="testbackend" /> <rewrite-uri template="/test" /> <!-- 拼接后端基础URL与请求路径 --> <send-request mode="copy" response-variable-name="BackendResponse" url="{{context.BackendServiceUrl}}/test"> <set-method>POST</set-method> </send-request> </inbound>
如果需要动态路径,也可以先将路径存入变量再拼接:
<inbound> <base /> <set-backend-service backend-id="testbackend" /> <set-variable name="targetPath" value="/test" /> <rewrite-uri template="/test" /> <send-request mode="copy" response-variable-name="BackendResponse" url="{{context.BackendServiceUrl}}{{targetPath}}"> <set-method>POST</set-method> </send-request> </inbound>
原理说明
set-backend-service仅为APIM默认的后端请求流程设置地址,而send-request属于独立发起的自定义请求,APIM不会自动将后端地址传递给它,必须显式指定url参数。通过context.BackendServiceUrl可以直接获取backend-id对应的后端基础URL,加上业务需要的路径后,即可正常发起请求并将响应存入指定变量。
内容的提问来源于stack exchange,提问作者Sahithi K
相关产品推荐
相关产品推荐

