Azure APIM配置validate-content策略后JSON请求体校验失效排查
问题场景
- 部署需求:在Azure APIM中对所有POST请求的JSON格式请求载荷执行校验
- 已完成配置:
- 在Schemas模块添加了符合规则的JSON Schema,配置截图:

- 在入站策略中添加了如下校验规则,指定关联的Schema为已创建的
Postschema:
- 在Schemas模块添加了符合规则的JSON Schema,配置截图:
<validate-content unspecified-content-type-action="prevent" max-size="102400" size-exceeded-action="prevent" errors-variable-name="requestBodyValidation"> <content type="application/json" validate-as="json" action="detect" schema-id="Postschema" /> </validate-content>
- 异常表现:传入不符合Schema规则的无效JSON发起请求,接口仍返回200成功响应,未触发校验拦截。
故障原因
配置错误的核心点是validate-content策略中content节点的action参数取值不符合拦截需求:
当前配置的action="detect"为日志记录模式,该模式下APIM仅会把校验错误存入指定的requestBodyValidation上下文变量,不会拦截非法请求,请求会正常转发至后端服务,因此最终返回200成功响应。
修复方法
将content节点的action属性值从detect修改为prevent,修改后的策略配置如下:
<validate-content unspecified-content-type-action="prevent" max-size="102400" size-exceeded-action="prevent" errors-variable-name="requestBodyValidation"> <content type="application/json" validate-as="json" action="prevent" schema-id="Postschema" /> </validate-content>
附validate-content策略三个action取值的实际效果,可按需选择:
prevent:校验不通过时直接拦截请求,返回400错误响应,不转发至后端,是生产环境校验拦截的常用配置detect:仅记录校验错误到上下文变量,不拦截请求,适合规则灰度验证、审计日志场景ignore:跳过对应类型内容的校验逻辑
内容的提问来源于stack exchange,提问作者Manjunath G
相关产品推荐
相关产品推荐

