在Azure APIM策略中使用System.Net.IPAddress解析IP地址报错排查
问题解决:Azure APIM策略中IPAddress类找不到的报错
问题原因
Azure APIM的策略表达式上下文默认未导入System.Net命名空间,即便官方文档说明支持System.Net.IPAddress类,直接使用IPAddress短名称会导致上下文无法识别该类型。
解决方案
有两种可行的修复方式:
方式1:使用完整命名空间限定类名
在代码中直接用System.Net.IPAddress替代IPAddress,修改后的策略代码如下:
<set-variable name="rawIpWhiteList" value="@{ List<string> rawIpWhiteList = new List<string>(){ "42.45.156.15", "177.136.25.113", "92.61.77.167", "80.254.169.123", }; return new JArray(rawIpWhiteList); }" /> <set-variable name="validSingleIPs" value="@{ List<string> rawIpWhiteList = ((JArray)context.Variables["rawIpWhiteList"]).ToObject<List<string>>(); List<string> validIpWhiteList = rawIpWhiteList.Where(ipString => System.Net.IPAddress.TryParse(ipString, out System.Net.IPAddress _)).ToList(); return new JArray(validIpWhiteList); }" />
方式2:显式导入System.Net命名空间
在策略的根级别(如<policies>下的<inbound>节点之前)添加<add-namespace>元素,导入System.Net命名空间,之后即可直接使用IPAddress短名称:
<policies> <inbound> <add-namespace>System.Net</add-namespace> <!-- 其他策略节点 --> <set-variable name="rawIpWhiteList" value="@{ List<string> rawIpWhiteList = new List<string>(){ "42.45.156.15", "177.136.25.113", "92.61.77.167", "80.254.169.123", }; return new JArray(rawIpWhiteList); }" /> <set-variable name="validSingleIPs" value="@{ List<string> rawIpWhiteList = ((JArray)context.Variables["rawIpWhiteList"]).ToObject<List<string>>(); List<string> validIpWhiteList = rawIpWhiteList.Where(ipString => IPAddress.TryParse(ipString, out IPAddress _)).ToList(); return new JArray(validIpWhiteList); }" /> </inbound> <!-- 其他策略节点 --> </policies>
补充说明
APIM策略表达式默认导入的命名空间包括System、System.Collections.Generic、Newtonsoft.Json.Linq等,但System.Net不在默认列表中,因此必须通过上述两种方式之一明确指定类的位置。
内容的提问来源于stack exchange,提问作者Charis
相关产品推荐
相关产品推荐

