帮你打开活字格更神奇的功能:七十九,活字格获取局域网IP
本帖最后由 Eric.Liang 于 2020-10-10 11:19 编辑之前有好几位格友都问过我在活字格中如何获取局域网内网IP。当然,为了方便大家的时候我们提供了JS获取内网IP,用来实现限制IP登录的功能。
但是,前一段时间突然有人反映,升级新版本活字格之后IP获取不成功,JS会报错,导致系统逻辑出了问题。
我们也在自己的机器测试,并没有复现,客户装回原始的版本,依然会报错,但是由于我们复测不出来具体的效果,导致无法排查问题。客户自己在排查过程中发现重装win7系统后正常,但是微软补丁升级后就无法继续使用了。这让我一度怀疑微软的补丁和JS获取局域网IP有一定的冲突。
因此,本教程我直接放弃使用前端代码获取局域网ip,改用C#服务器端代码获取局域网IP,达到一步到位的效果。
目前服务器端代码中我直接是获取了ipv4的局域网IP,返回到前端,可以在前端通过JS代码去操作。
C#代码
using GrapeCity.Forguncy.ServerApi;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace getLanIP
{
public class Class1:ForguncyApi
{
public void getLanIP()
{
List<string> ipv4_ips = GetLocalIpAddress("InterNetwork");
this.Context.Response.Write(ipv4_ips);
}
/// <summary>
/// 获取本机所有ip地址
/// </summary>
/// <param name="netType">"InterNetwork":ipv4地址,"InterNetworkV6":ipv6地址</param>
/// <returns>ip地址集合</returns>
public static List<string> GetLocalIpAddress(string netType)
{
string hostName = Dns.GetHostName(); //获取主机名称
IPAddress[] addresses = Dns.GetHostAddresses(hostName); //解析主机IP地址
List<string> IPList = new List<string>();
if (netType == string.Empty)
{
for (int i = 0; i < addresses.Length; i++)
{
IPList.Add(addresses.ToString());
}
}
else
{
//AddressFamily.InterNetwork表示此IP为IPv4,
//AddressFamily.InterNetworkV6表示此地址为IPv6类型
for (int i = 0; i < addresses.Length; i++)
{
if (addresses.AddressFamily.ToString() == netType)
{
IPList.Add(addresses.ToString());
}
}
}
return IPList;
}
}
}
前端JS代码(res为返回的内网IP信息,这里弹出了内网IP)
//发送请求到服务器
Forguncy.Helper.post("customapi/class1/getLanIP", null, function (res) {
alert(res);
});
具体使用见下方:
1.针对C#工程文件进行编译
2.在该C#工程文件的文件夹中找到bin/release/对应方法的dll
3.在活字格设计器中上传2中的dll
4.在页面中对该dll的post方法进行调用
从而达到获取局域网IP的逻辑。
工程文件见附件
升级6.1新版本后serverAPI需要做升级适配哦【https://help.grapecity.com.cn/pages/viewpage.action?pageId=53351798】
升级版本呈上:(内含demo)
页:
[1]