You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure APIM中使用rewrite-uri追加上下文变量的方法咨询

解决Azure APIM中上下文变量追加到URL的重写问题

你遇到的问题核心在于上下文变量的引用方式和策略执行顺序,咱们一步步来搞定:

错误原因分析

你原来写的<rewrite-uri template="/accounts/{accountKey}" />里的{accountKey},APIM会默认把它当成请求的路径/查询参数去匹配,而不是你存在context.Variables里的上下文变量,所以才会抛出“Variable accountKey has no value.”的错误。另外还要注意:如果你的set-variable策略是在rewrite-uri之后执行的,那执行重写时变量还没被赋值,也会触发同样的问题。

正确实现方法

1. 用策略表达式引用上下文变量

在APIM策略中,要调用context.Variables里的变量,必须用**@{...}包裹的策略表达式**语法。把rewrite-uri的模板改成这样:

<rewrite-uri template="/accounts/@{context.Variables["accountKey"]}" />

APIM在执行时会自动解析这个表达式,把context.Variables["accountKey"]的实际值替换进去。

2. 确保变量在重写前完成赋值

检查你的策略执行顺序,set-variable必须放在rewrite-uri之前执行,这样当重写URL操作触发时,变量已经有有效值了。完整的inbound策略示例如下:

<policies>
  <inbound>
    <!-- 先执行变量设置,保证顺序在重写之前 -->
    <set-variable name="accountKey" value="232" />
    <base />
    <rewrite-uri template="/accounts/@{context.Variables["accountKey"]}" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

验证结果

按照这个配置执行后,APIM会成功把请求URL重写为/accounts/232,完全符合你的目标要求。

内容的提问来源于stack exchange,提问作者ΩmegaMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:32:15