OpenAPI验证查询字符串数组参数失败及路由匹配异常排查
OpenAPI验证防火墙转发请求的两类问题:数组参数校验失败与路由匹配错误
我们在通过OpenAPI文档验证防火墙转发至.NET Core 8后端的接口请求时,遇到了以下两类问题:
一、数组查询参数estados始终触发校验错误
相关OpenAPI文档片段
openapi: 3.0.1 ... /api/pedidosassistencias/pesquisa: get: tags: - PedidosAssistencias summary: Devolve uma lista paginada de pedidos de assistência compatível com os critérios indicados. description: Devolve uma lista paginada ResumoPedidoAssistencia pedidos de assistência compatível com os critérios indicados. parameters: - name: estados in: query description: Estados do pedido a filtrar schema: type: array items: $ref: '#/components/schemas/EstadoPedido' description: Estados do pedido a filtrar ...
其中EstadoPedido是枚举类型,estados参数值只能为该枚举中的项。
尝试过的传参方式(均触发校验错误)
- 单个参数:
https://XXX/api/pedidosassistencias/pesquisa?estados=2&idLocalTrabalho=100 - 单个参数带方括号:
https://XXX/api/pedidosassistencias/pesquisa?estados[]=2&idLocalTrabalho=100 - 单个参数带索引:
https://XXX/api/pedidosassistencias/pesquisa?estados[0]=2&idLocalTrabalho=100 - 多个参数重复键名:
https://XXX/api/pedidosassistencias/pesquisa?estados=2&estados=3&idLocalTrabalho=100 - 多个参数带方括号:
https://XXX/api/pedidosassistencias/pesquisa?estados[]=2&estados[]=3&idLocalTrabalho=100 - 多个参数带索引:
https://XXX/api/pedidosassistencias/pesquisa?estados[0]=2&estados[1]=3&idLocalTrabalho=100
移除estados参数后,请求可正常通过验证。
最初使用estados[pos]格式是为了规避防火墙的重复参数名检查(.NET Core 8后端可通过[]语法正确解析为数组)。根据OpenAPI文档,默认form风格(explode: true)的重复键名传参方式(estados=2&estados=3)应该符合规范,但防火墙仍提示参数不符合OpenAPI文档。
二、路由匹配错误:误将/api/equipamentos/pesquisa匹配到带路径参数的端点
测试其他API时发现路由匹配异常:调用/api/equipamentos/pesquisa时,收到错误提示:
API Validation violation - Path parameter "idEquipamento" validation failure : Failed to validate schema
但该端点并不存在idEquipamento路径参数。查看OpenAPI文档,存在两个相关路径:
路径1:带路径参数的端点
/api/equipamentos/{idEquipamento}: get: parameters: - name: idEquipamento in: path required: true schema: type: integer description: Id do equipamento pai. format: int32
路径2:独立的pesquisa端点
存在/api/equipamentos/pesquisa的定义,但验证器错误地将请求匹配到了/api/equipamentos/{idEquipamento},而非正确的pesquisa端点。
请问这两类问题的根源是什么?是否是防火墙的OpenAPI验证功能存在bug?
内容的提问来源于stack exchange,提问作者Luis Abreu
相关产品推荐
相关产品推荐

