如何制作一个单页网站,WordPress带前端会员中心,备案修改网站名称,如何建平台网站【开源框架】| 通用工具类库这是恰童鞋骚年的第223篇原创文章本文介绍一个我的同事【懒得勤快】#xff08;人称勤快哥#xff0c;我们叫他骚哥#xff09;写的一个.NET开源工具类库项目#xff0c;包含一些常用的操作类#xff0c;大都是静态类#xff0c;加密解密… 【开源框架】| 通用工具类库这是恰童鞋骚年的第223篇原创文章本文介绍一个我的同事【懒得勤快】人称勤快哥我们叫他骚哥写的一个.NET开源工具类库项目包含一些常用的操作类大都是静态类加密解密反射操作硬件信息字符串扩展方法日期时间扩展操作大文件拷贝图像裁剪验证码等常用封装。1项目起因这是我的同事【懒得勤快】从入坑编程多年来的代码积累他把一些编程中常用的一些代码进行了封装在后续的任何开发当中使用上它避免重复地去造一些轮子把重心转移到项目的推进几乎可以做任何的事情。他说现在项目中没了它写逻辑代码还真有点困难。由于C#语言有个其他语言不可替代的特性扩展方法所以项目的实现90%以上都是通过扩展方法实现的方便直接调用。因此我们可以看出虽然他的网名叫【懒得勤快】实际上他比大多数人都勤快的多。另外我司.NET Core项目中的核心工具类库也主要是引用了众多这个类库中的通用方法很多骚操作都是从这个项目中直接复用的。2项目简介项目包含了日常编程多数的常用封装可以说是一个万能框架能够用于任何基于.NET平台包括.NET Core的项目当中。功能主要覆盖数据库操作内存表操作、关系实体映射等日期时间常用操作农历操作、时间戳操作时分秒转换等文件操作大文件操作、文件压缩与解压、ini配置文件操作硬件操作获取电脑各个硬件的性能指标Html操作利用C#对html字符串进行“dom”操作html的XSS净化、html标签操作日志组件高并发可用的高性能日志记录多媒体文件操作图片的各种处理网络操作获取线程内唯一对象、Session和Cookie的扩展、获取IP地址详细信息、缓存操作NoSQL仅封装了Redis的常用操作mongodb的操作类客户端独立分开了反射操作各种对对象的字段属性和方法的快捷方式加密安全对字符串进行的扩展包含AES、DES、MD5、hash、SHA1、加盐等字符串扩展包含验证码生成、各种与字符串相关的扩展Win32API包含于Windows系统接口相关的操作封装全局扩展包含字符串扩展类型转换委托、循环操作、异步操作、正则等。项目源代码托管于github程序包发布于nuget目前已有745个star以及30000余次下载由此也可以说明大伙也挺喜欢这个工具组件的。github地址这里仅展示我司的开源社区仓库地址他的个人仓库中的这个项目star数目有745个https://github.com/XiLife-OSPC/Masuit.Tools值得一提的是这个项目加入了反996的许可即任何性质的外包公司或996公司需要使用本类库请联系作者进行商业授权其他企业或个人可随意使用不受限。3安装程序包.NET Framework ≥4.6.1PM Install-Package Masuit.Tools.Net.NET Core 3.xPM Install-Package Masuit.Tools.Core4特色功能示例1、检验字符串是否是Email、手机号、URL、IP地址、身份证号bool isEmail3444764617qq.com.MatchEmail();
bool isInetAddress 114.114.114.114.MatchInetAddress();
bool isUrl http://masuit.com.MatchUrl();
bool isPhoneNumber 15205201520.MatchPhoneNumber();
bool isIdentifyCard 312000199502230660.MatchIdentifyCard();// 校验中国大陆身份证号
2、硬件检测仅支持Windows平台float load SystemInfo.CpuLoad;// 获取CPU占用率
long physicalMemory SystemInfo.PhysicalMemory;// 获取物理内存总数
long memoryAvailable SystemInfo.MemoryAvailable;// 获取物理内存可用率
double freePhysicalMemory SystemInfo.GetFreePhysicalMemory();// 获取可用物理内存
Dictionarystring, string diskFree SystemInfo.DiskFree();// 获取磁盘每个分区可用空间
Dictionarystring, string diskTotalSpace SystemInfo.DiskTotalSpace();// 获取磁盘每个分区总大小
Dictionarystring, double diskUsage SystemInfo.DiskUsage();// 获取磁盘每个分区使用率
double temperature SystemInfo.GetCPUTemperature();// 获取CPU温度
int cpuCount SystemInfo.GetCpuCount();// 获取CPU核心数
IListstring ipAddress SystemInfo.GetIPAddress();// 获取本机所有IP地址
string localUsedIp SystemInfo.GetLocalUsedIP();// 获取本机当前正在使用的IP地址
IListstring macAddress SystemInfo.GetMacAddress();// 获取本机所有网卡mac地址
string osVersion SystemInfo.GetOsVersion();// 获取操作系统版本
RamInfo ramInfo SystemInfo.GetRamInfo();// 获取内存信息
3、大文件操作FileStream fs new FileStream(D:\boot.vmdk, FileMode.OpenOrCreate, FileAccess.ReadWrite);
{//fs.CopyToFile(D:\1.bak);//同步复制大文件fs.CopyToFileAsync(D:\1.bak);//异步复制大文件string md5 fs.GetFileMD5Async().Result;//异步获取文件的MD5
}
4、HTML的防XSS处理string html link href/Content/font-awesome/css relstylesheet/!--[if IE 7]link href/Content/font-awesome-ie7.min.css relstylesheet/![endif]--script src/Scripts/modernizr/scriptdiv idsearchBox rolesearchform action/packages methodgetspan classuser-actionsa href/users/account/LogOff退出/a/spaninput nameq idsearchBoxInput/input idsearchBoxSubmit typesubmit valueSubmit //form/div;
string s html.HtmlSantinizerStandard();//清理后divspana href/users/account/LogOff退出/a/span/div
5、整理操作系统内存仅支持WindowsWindows.ClearMemorySilent();
6、任意禁止转换NumberFormater nf new NumberFormater(36);//内置2-62进制的转换
//NumberFormater nf new NumberFormater(0123456789abcdefghijklmnopqrstuvwxyz);// 自定义进制字符可用于生成验证码
string s36 nf.ToString(12345678);
long num nf.FromString(7clzi);
Console.WriteLine(12345678的36进制是 s36); // 7clzi
Console.WriteLine(36进制的7clzi是 num); // 12345678
var bin12345678.ToBinary(36);//7clzi
7、纳秒级性能计数器HiPerfTimer timer HiPerfTimer.StartNew();
for (int i 0; i 100000; i)
{//todo
}
timer.Stop();
Console.WriteLine(执行for循环100000次耗时timer.Durations);
double time HiPerfTimer.Execute(()
{for (int i 0; i 100000; i){//todo}
});
Console.WriteLine(执行for循环100000次耗时times);
8、单机产生唯一有序的短IDvar tokenStopwatch.GetTimestamp().ToBinary(36);var set new HashSetstring();
double time HiPerfTimer.Execute(()
{for (int i 0; i 1000000; i){set.Add(Stopwatch.GetTimestamp().ToBinary(36));}
});
Console.WriteLine(set.Count1000000);//True
Console.WriteLine(产生100w个id耗时times);//1.6639039s
9、产生分布式唯一有序的短IDvar sf SnowFlake.GetInstance();
string token sf.GetUniqueId();// rcofqodori0w
string shortId sf.GetUniqueShortId(8);// qodw9728var set new HashSetstring();
double time HiPerfTimer.Execute(()
{for (int i 0; i 1000000; i){set.Add(SnowFlake.GetInstance().GetUniqueId());}
});
Console.WriteLine(set.Count 1000000); //True
Console.WriteLine(产生100w个id耗时 time s); //2.6891495s
10、农历转换ChineseCalendar.CustomHolidays.Add(DateTime.Parse(2018-12-31),元旦节);//自定义节假日
ChineseCalendar today new ChineseCalendar(DateTime.Parse(2018-12-31));
Console.WriteLine(today.ChineseDateString);// 二零一八年十一月廿五
Console.WriteLine(today.AnimalString);// 生肖狗
Console.WriteLine(today.GanZhiDateString);// 干支戊戌年甲子月丁酉日
Console.WriteLine(today.DateHoliday);// 获取按公历计算的节假日
...
11、LINQ表达式树扩展ExpressionFuncstring, bool where1 s s.StartsWith(a);
ExpressionFuncstring, bool where2 s s.Length 10;
Funcstring, bool func where1.And(where2).Compile();
bool bfunc(abcd12345678);//trueExpressionFuncstring, bool where1 s s.StartsWith(a);
ExpressionFuncstring, bool where2 s s.Length 10;
Funcstring, bool func where1.Or(where2).Compile();
bool bfunc(abc);// true
12、模板引擎var tmp new Template({{name}}你好);
tmp.Set(name, 万金油);
string s tmp.Render();//万金油你好var tmp new Template({{one}},{{two}},{{three}});
string s tmp.Set(one, 1).Set(two, 2).Set(three, 3).Render();// 1,2,3var tmp new Template({{name}}{{greet}});
tmp.Set(name, 万金油);
string s tmp.Render();// throw 模版变量{{greet}}未被使用
13、List转DataTablevar list new ListMyClass()
{new MyClass(){Name 张三,Age 22},new MyClass(){Name 李四,Age 21},new MyClass(){Name 王五,Age 28}
};
var table list.Select(c new{姓名c.Name,年龄c.Age}).ToList().ToDataTable();// 将自动填充列姓名和年龄
14、文件压缩与解压基于.NET FrameworkMemoryStream ms SevenZipCompressor.ZipStream(new Liststring()
{D:\1.txt,http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg,
});//压缩成内存流SevenZipCompressor.Zip(new Liststring()
{D:\1.txt,http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg,
}, zip);//压缩成zip
SevenZipCompressor.UnRar(D:\Download\test.rar, D:\Download\);//解压rar
SevenZipCompressor.Decompress(D:\Download\test.tar, D:\Download\);//自动识别解压压缩包
SevenZipCompressor.Decompress(D:\Download\test.7z, D:\Download\);
基于.NET Core首先是注入services.AddSevenZipCompressor(); // Startup.cs中注入Compressor// 构造函数注入
private readonly ISevenZipCompressor _sevenZipCompressor;
public Test(ISevenZipCompressor sevenZipCompressor)
{_sevenZipCompressor sevenZipCompressor;
}
其次使用方式同.NET Framework版15、FTP客户端FtpClient ftpClient FtpClient.GetAnonymousClient(192.168.2.2);//创建一个匿名访问的客户端
//FtpClient ftpClient FtpClient.GetClient(192.168.2.3,admin,123456);// 创建一个带用户名密码的客户端
ftpClient.Delete(/1.txt);// 删除文件
ftpClient.Download(/test/2.txt,D:\\test\\2.txt);// 下载文件
ftpClient.UploadFile(/test/22.txt,D:\\test\\22.txt,(sum, progress)
{Console.WriteLine(已上传progress*1.0/sum);
});//上传文件并检测进度
Liststring files ftpClient.GetFiles(/);//列出ftp服务端文件列表
...
16、加密解密var enc123456.MDString();// MD5加密
var enc123456.MDString(abc);// MD5加盐加密
var enc123456.MDString2();// MD5两次加密
var enc123456.MDString2(abc);// MD5两次加盐加密
var enc123456.MDString3();// MD5三次加密
var enc123456.MDString3(abc);// MD5三次加盐加密string aes 123456.AESEncrypt();// AES加密为密文
string s aes.AESDecrypt(); //AES解密为明文
string aes 123456.AESEncrypt(abc);// AES密钥加密为密文
string s aes.AESDecrypt(abc); //AES密钥解密为明文string enc 123456.DesEncrypt();// DES加密为密文
string s enc.DesDecrypt(); //DES解密为明文
string enc 123456.DesEncrypt(abcdefgh);// DES密钥加密为密文
string s enc.DesDecrypt(abcdefgh); //DES密钥解密为明文RsaKey rsaKey RsaCrypt.GenerateRsaKeys();// 生成RSA密钥对
string encrypt 123456.RSAEncrypt(rsaKey.PublicKey);// 公钥加密
string s encrypt.RSADecrypt(rsaKey.PrivateKey);// 私钥解密
17、实体校验public class MyClass
{[IsEmail]public string Email { get; set; }[IsPhone]public string PhoneNumber { get; set; }[IsIPAddress]public string IP { get; set; }[MinValue(0, ErrorMessage 年龄最小为0岁), MaxValue(100, ErrorMessage 年龄最大100岁)]public int Age { get; set; }[ComplexPassword]//密码复杂度校验public string Password { get; set; }
}
18、邮件发送new Email()
{SmtpServer smtp.masuit.com,// SMTP服务器SmtpPort 25, // SMTP服务器端口EnableSsl true,//使用SSLUsername adminmasuit.com,// 邮箱用户名Password 123456,// 邮箱密码Tos 10000qq.com,10001qq.com, //收件人Subject 测试邮件,//邮件标题Body 你好啊,//邮件内容
}.SendAsync(s
{Console.WriteLine(s);// 发送成功后的回调
});// 异步发送邮件
19、敏感信息掩码13123456789.Mask(); // 131****5678
adminmasuit.com.MaskEmail(); // a****nmasuit.com
20、更多请点击本文底部“阅读原文”了解更多通用工具方法接口解锁Masuit.Tools的各类骚操作5小结喜欢这个项目的话就点击本文底部“阅读原文”Star、Fork、Follow素质三连关注一下吧。往期精彩回顾.NET开源分表框架EFCore.Sharding.NET开源AI生态SciSharp Stack基于CanalSharp的ASP.NET Core组件如果本文对你有用不妨点个“在看”或者转发朋友圈????点击阅读原文素质三连