找回密码
 立即注册

QQ登录

只需一步,快速开始

Eric.Liang 讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2020-2-3 11:50  /   查看:9732  /  回复:1
本帖最后由 Eric.Liang 于 2020-10-10 11:19 编辑

之前有好几位格友都问过我在活字格中如何获取局域网内网IP。当然,为了方便大家的时候我们提供了JS获取内网IP,用来实现限制IP登录的功能。
但是,前一段时间突然有人反映,升级新版本活字格之后IP获取不成功,JS会报错,导致系统逻辑出了问题。

我们也在自己的机器测试,并没有复现,客户装回原始的版本,依然会报错,但是由于我们复测不出来具体的效果,导致无法排查问题。客户自己在排查过程中发现重装win7系统后正常,但是微软补丁升级后就无法继续使用了。这让我一度怀疑微软的补丁和JS获取局域网IP有一定的冲突。

因此,本教程我直接放弃使用前端代码获取局域网ip,改用C#服务器端代码获取局域网IP,达到一步到位的效果。

目前服务器端代码中我直接是获取了ipv4的局域网IP,返回到前端,可以在前端通过JS代码去操作。

C#代码
  1. using GrapeCity.Forguncy.ServerApi;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using System.Threading.Tasks;

  8. namespace getLanIP
  9. {
  10.     public class Class1:ForguncyApi
  11.     {
  12.         [Post]
  13.         public void getLanIP()
  14.         {
  15.             List<string> ipv4_ips = GetLocalIpAddress("InterNetwork");
  16.             this.Context.Response.Write(ipv4_ips[0]);
  17.         }
  18.         /// <summary>
  19.         /// 获取本机所有ip地址
  20.         /// </summary>
  21.         /// <param name="netType">"InterNetwork":ipv4地址,"InterNetworkV6":ipv6地址</param>
  22.         /// <returns>ip地址集合</returns>
  23.         public static List<string> GetLocalIpAddress(string netType)
  24.         {
  25.             string hostName = Dns.GetHostName();                    //获取主机名称  
  26.             IPAddress[] addresses = Dns.GetHostAddresses(hostName); //解析主机IP地址  

  27.             List<string> IPList = new List<string>();
  28.             if (netType == string.Empty)
  29.             {
  30.                 for (int i = 0; i < addresses.Length; i++)
  31.                 {
  32.                     IPList.Add(addresses[i].ToString());
  33.                 }
  34.             }
  35.             else
  36.             {
  37.                 //AddressFamily.InterNetwork表示此IP为IPv4,
  38.                 //AddressFamily.InterNetworkV6表示此地址为IPv6类型
  39.                 for (int i = 0; i < addresses.Length; i++)
  40.                 {
  41.                     if (addresses[i].AddressFamily.ToString() == netType)
  42.                     {
  43.                         IPList.Add(addresses[i].ToString());
  44.                     }
  45.                 }
  46.             }
  47.             return IPList;
  48.         }
  49.     }
  50. }
复制代码


前端JS代码(res为返回的内网IP信息,这里弹出了内网IP)
  1. //发送请求到服务器
  2. Forguncy.Helper.post("customapi/class1/getLanIP", null, function (res) {
  3.     alert(res);
  4. });
复制代码


具体使用见下方:
1.针对C#工程文件进行编译
image.png301247557.png

2.在该C#工程文件的文件夹中找到bin/release/对应方法的dll
image.png227227172.png

3.在活字格设计器中上传2中的dll
image.png773467406.png

4.在页面中对该dll的post方法进行调用
image.png245868224.png

从而达到获取局域网IP的逻辑。
工程文件见附件

getLanIP.zip

258.5 KB, 下载次数: 686

getLanIP.zip

2.13 KB, 下载次数: 552

获取内网IP.fgcc

51.64 KB, 下载次数: 725

1 个回复

倒序浏览
Lucas.Su讲师达人认证 悬赏达人认证 活字格认证
葡萄城公司职员   /  发表于:2020-12-21 17:40:30
推荐
升级6.1新版本后serverAPI需要做升级适配哦【https://help.grapecity.com.cn/pa ... ion?pageId=53351798
升级版本呈上:(内含demo) getLanIP6.1升級适配.zip (2.2 MB, 下载次数: 660)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部