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

Azure APIM validate-content策略未按预期拦截无关JSON请求问题

validate-content策略未拦截无关JSON请求排查方案

问题根因

你推测的方向完全正确,异常行为由两个Schema配置缺失共同导致:

  • 根对象未声明必填规则:你的AddressBody根节点仅定义了address、name两个属性的类型,但没有通过required字段声明这两个属性为必填项。之前能正常触发拦截的请求示例,是因为携带了name对象,而name子节点你配置了必填字段校验,缺失fistName时才会被拦截;当请求完全不带address、name字段时,因为根节点没有必填约束,不会触发必填校验失败。
  • 默认允许未定义的额外属性:JSON Schema 规范默认additionalProperties参数值为true,即允许对象出现未在properties中显式声明的字段。你当前所有Schema层级都未配置该参数,因此请求携带Schema外的无关字段时,原生校验逻辑不会判定为非法。第三方校验站点如果默认开启了严格校验模式才会拦截这类请求,和网关默认的原生JSON Schema校验逻辑存在差异。
    你之前尝试添加request representation未生效,是因为仅关联了原有未修正的Schema,没有补全上述两个核心配置,因此校验行为不会发生变化。

修复方案

修改OpenAPI 3.0规范中的Schema定义,补全两个配置即可:

  1. 给所有需要严格校验的对象节点添加additionalProperties: false,禁止出现未定义的额外字段,该配置按对象层级独立生效,嵌套对象需要单独配置
  2. 给根对象AddressBody添加required声明,标记必填字段
    修正后的Schema片段如下:
components:
  schemas:
    AddressBody:
      type: object
      additionalProperties: false
      required:
        - address
        - name
      properties:
        address:
          type: string
          example: "01 Auckland"
        name:
          type: object
          additionalProperties: false
          required:
              - fistName
              - lastName
          properties:
            fistName:
              type: string
              example: Fist Name
            lastName:
              type: string
              example: Last Name

注意事项

  • 修改完OpenAPI定义后需要重新发布/更新API配置,确保最新Schema同步到网关校验逻辑中
  • 你当前的validate-content策略XML配置本身没有问题,action="prevent"、Content-Type匹配规则均配置正确,Schema修正后即可正常拦截非法请求
  • 如果业务上允许特定层级携带扩展字段,可以仅在需要严格校验的层级配置additionalProperties: false,不必全量开启

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:18:30