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

Azure APIM中API级别策略无法获取Product.Name的问题咨询

解决APIM中API级别策略访问context.Product为空的问题

这个问题我之前在配置APIM策略时也踩过坑,咱们来理清楚原因和解决办法:

为什么context.Product会为空?

核心原因是APIM的执行顺序导致的:当API级别的入站策略执行时,系统还没完成「产品匹配」的环节。APIM的执行流程大概是这样的:

  1. 接收请求
  2. 执行API级别的入站策略
  3. 进行产品匹配(确定请求关联到哪个产品)
  4. 执行产品级别的入站策略
  5. 转发请求到后端

所以在步骤2的时候,context.Product还没有被赋值,自然就会出现空引用异常。另外还有两种可能:

  • 请求没有携带有效的订阅密钥(匿名访问),此时没有关联的产品
  • 订阅密钥对应的订阅没有绑定任何产品,或者产品已被禁用

可行的解决方法

方法1:改用产品级别策略

如果你的逻辑是针对特定产品的,直接把策略配置在产品的入站策略里。这时候因为策略是绑定到产品上的,context.Product必然有值,不会出现空引用。

方法2:通过订阅关联的产品获取(API级别策略可用)

每个有效的订阅都是和产品绑定的,所以可以通过context.Subscription.Product来获取产品信息,这个属性在API级别入站策略里是可用的。修改你的策略代码如下:

<policies>
    <inbound>
        <set-variable name="ProductName" value="@{ 
            // 空值保护,避免匿名请求或无效订阅导致异常
            return context.Subscription?.Product?.Name ?? "Anonymous/No Product"; 
        }" />
    </inbound>
</policies>

注意加上空值判断(?.和??),防止请求没有订阅密钥时再次抛出空引用异常。

方法3:确保请求携带有效的订阅密钥

检查Postman请求里是否正确添加了Ocp-Apim-Subscription-Key请求头,并且这个密钥对应的订阅已经关联到某个存在的产品。如果是匿名访问的API,那本身就没有产品关联,这种情况要提前做逻辑判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:37:31