我正在尝试编写一个应用程序来自动化路由器配置。不幸的是,对于我们使用的路由器,telnet 不是一个选项。
所以我不得不使用 C# WebClient 类与 Cisco Web 界面进行交互。
到目前为止,我已经能够使用 NameValueCollection 和 WebClient.UploadValues 设置我需要的一切。
我会获取表单上的所有输入元素,然后只需上传与表单上输入类型对应的名称值 Collection,将每个元素的值设置为所需的设置。
但是现在我遇到了一个问题。
对于其中一种形式,它使用多选控件来处理输入数据数组,而不是输入类型。
我完全不知道如何设置它。
多选的html如下
<select multiple class="MultiSelect" name="PortRangeList" size="12" onChange="showList(this.form.PortRangeList);" style="width: 100%">
<option value="All Traffic{[(*-*-*)]}1;0;1;65535;0}">All Traffic [TCP&UDP/1~65535]</option>
<option value="DNS{[(*-*-*)]}2;17;53;53;0}">DNS [UDP/53~53]</option>
<option value="FTP{[(*-*-*)]}3;6;21;21;0}">FTP [TCP/21~21]</option>
...
</select>
当我使用输入类型时,我只需执行以下操作
NameValueCollection formNetworkData = new NameValueCollection();
formNetworkData["ipAddr"] = "192.168.1.2";
formNetworkData["lanMask"] = "255.255.255.0";
downloadedData = _routerWebClient.UploadValues(_routerIP + NETWORK, formNetworkData);
但是看看这个新表单的代码,它在提交之前就出现了,它选择了多选中的所有选项。
我意识到我可能没有很好地提出这个问题,但我们将不胜感激任何帮助。
使用 Chrome 调试器 PortRangeList 正是您所说的。
有5种输入类型
submitStatus, upnpOpen (等等...)
对于那些我的代码看起来像这样
NameValueCollection formData = new NameValueCollection();
formData["submitStatus"]="1";
formData["upnpOpen"]="0";
downloadedData = _routerWebClient.UploadValues(SERVICE0, formData);
但是为了提交 PortRangeList 数据,我不能使用 NameValueCollection,因为它不允许名称具有多个值。
怎么能提交呢?
WebClient.UploadData、WebClient.UploadFile 或 WebClient.UploadString 可能吗?