Azure API Management第二个when条件表达式求值异常原因咨询
问题原因
第二个when表达式的判断逻辑本身没有写法错误,它在你预期返回false的场景下求值为true,本质是参与比较的两个字符串实际内容不一致:你存在配置里的{{Client-Thumbprint}}值,开头混入了一个肉眼完全看不到的Unicode左到右控制字符(编码U+200E,也叫LRM标记)。
你贴的报错输出里已经能看到这个问题的痕迹:第二行的配置指纹字符串,包裹值的反引号和指纹首字符A之间夹着这个隐藏字符,只是正常显示时完全看不出区别。这个字符一般是你从Windows证书管理面板、网页或者其他带格式的文档里复制指纹串的时候被自动带进去的,存配置的时候没清理掉就留了下来。
字符串相等判断是逐字符精确匹配的,哪怕多了一个没有视觉宽度的控制字符,也会判定两个字符串不相等,所以你写的!=判断成立:请求携带的证书指纹和带隐藏字符的clientCert值不相等,和testCert值也不相等,整个&&连接的条件自然返回true,进入403返回分支。你只要把配置值里的这个隐藏字符删掉,比对结果就会符合预期。
内容的提问来源于stack exchange,提问作者daggett
相关产品推荐
相关产品推荐

