Azure APIM策略校验PageSize参数时表达式语法报错问题排查
API网关PageSize参数校验策略报错解决
问题场景
需在API网关的outbound区段校验查询参数PageSize,当参数值≥20时返回提示信息,添加的策略代码如下:
<outbound> <choose> <when condition="@(context.Request.Url.Query.GetValueOrDefault(\"PageSize\")) >= 20"> <set-status code="205" reason="validation" /> <set-body template="none">{\"Message\":\"PageSize need to be less than 20\"}</set-body> </when> </choose> <base /> </outbound>
报错信息
保存策略时门户返回错误:
一个或多个字段包含无效值:
第21行第10列的'choose'元素存在错误:表达式语法无效。
问题原因及修正方案
原因
context.Request.Url.Query.GetValueOrDefault("PageSize")返回的是字符串类型,直接与数字20做比较会引发类型不匹配,导致表达式语法错误。
修正代码
<outbound> <choose> <when condition="@(int.TryParse(context.Request.Url.Query.GetValueOrDefault("PageSize"), out int pageSize) && pageSize >= 20)"> <set-status code="205" reason="validation" /> <set-body template="none">{"Message":"PageSize need to be less than 20"}</set-body> </when> </choose> <base /> </outbound>
修正说明
- 用
int.TryParse安全转换参数值,避免参数为空或非数字时抛出异常 - 先验证转换成功,再进行数值比较,确保表达式语法合法且逻辑正确
内容的提问来源于stack exchange,提问作者Nuwan Indika
相关产品推荐
相关产品推荐

