Eric.Liang 发表于 2020-2-3 11:50:40

帮你打开活字格更神奇的功能:七十九,活字格获取局域网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的逻辑。
工程文件见附件

Lucas.Su 发表于 2020-12-21 17:40:30

升级6.1新版本后serverAPI需要做升级适配哦【https://help.grapecity.com.cn/pages/viewpage.action?pageId=53351798】
升级版本呈上:(内含demo)

页: [1]
查看完整版本: 帮你打开活字格更神奇的功能:七十九,活字格获取局域网IP