You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:06:25