# netcoreTools
**Repository Path**: davidsoft/netcoreTools
## Basic Information
- **Project Name**: netcoreTools
- **Description**: .netcore 常用工具类集合(加密解密、xml遍历解析、常用正则表达式、动态json配置解析对象)
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 8
- **Created**: 2022-03-22
- **Last Updated**: 2023-07-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Xmtool .netcore常用工具集合库
收集.netcore开发过程中经常需要用到的工具类,目前收集的相关工具类涉及Json、Xml、正则表达式常用判断、加解密、Http请求、日期时间,数据类型、动态对象、图形验证码生成、发送邮件等,持续收集中。。。
## 依赖安装
##### Package Manager
```shell
Install-Package CodeM.Common.Tools -Version 1.2.0
```
##### .NET CLI
```shell
dotnet add package CodeM.Common.Tools --version 1.2.0
```
##### PackageReference
```xml
```
##### Paket CLI
```shell
paket add CodeM.Common.Tools --version 1.2.0
```
## 使用方法
Xmtool工具集合库通过Xmtool静态类统一对外提供服务,所有的详细工具类都可以通过Xmtool返回对应工具类实例,用户通过实例调用具体工具类的API。
### Xmtool API
#### 方法:
1. 获取编码加解密工具类
[CryptoTool](#crypto-tool) Crypto()
2. 获取日期时间工具类
[DateTimeTool](#datetime-tool) DateTime()
3. 获取Hash工具类
[HashTool](#hash-tool) Hash()
4. 获取正则表达式工具类
[RegexTool](#regex-tool) Regex()
5. 获取类型相关工具类
[TypeTool](#type-tool) Type()
6. 获取Xml工具类
[XmlTool](#xml-tool) Xml()
7. 发送邮件工具类
[MailTool](#mail-tool) Mail()
8. 验证码生成工具类
[CaptchaTool](#captcha-tool) Captcha()
#### 属性:
1. 返回Json工具类
[JsonTool](#json-tool) Json
2. 返回Web工具类
[WebTool](#web-tool) Web
### CryptoTool API
##### 1. 对字符串进行Base64编码并返回结果
string Base64Encode(string text, string encoding = "utf-8")
###### 参数:
text:待编码的字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
经过Base64编码后的字符串
##### 2. 解码Base64字符串并返回结果
string Base64Decode(string base64Text, string encoding = "utf-8")
###### 参数:
base64Text:待解码的Base64编码的字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
经过Base64解码后的字符串
##### 3. AES加密方法
string AESEncode(string text, string key, string encoding = "utf-8")
###### 参数:
text:待加密的字符串
key:加密字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
加密后的字符串
##### 4. AES解密方法
string AESDecode(string aesText, string key, string encoding = "utf-8")
###### 参数:
aesText:待解密的AES加密字符串
key:加密字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
解密后的字符串
### DateTimeTool API
##### 1. 获取10位UTC时间戳
long GetUtcTimestamp10()
###### 参数:
无
###### 返回:
返回10位当前Utc时间戳。
##### 2. 获取13位UTC时间戳
long GetUtcTimestamp13()
###### 参数:
无
###### 返回:
返回10位当前Utc时间戳。
##### 3. 根据10位UTC时间戳得到本地日期时间对象
DateTime GetLocalDateTimeFromUtcTimestamp10(long ts)
###### 参数:
ts:10位UTC时间戳
###### 返回:
返回时间戳转换后的本地日期时间对象。
##### 4. 根据13位UTC时间戳得到本地日期时间对象
DateTime GetLocalDateTimeFromUtcTimestamp13(long ts)
###### 参数:
ts:13位UTC时间戳
###### 返回:
返回时间戳转换后的本地日期时间对象。
##### 5. 检查字符串时间范围格式是否合法
bool CheckStringTimeSpan(string timespan, bool throwError = true)
###### 参数:
timespan:时间范围字符串,单位支持ms, s, m, h, d;如:1s,代表1秒
throwError:格式不合法时是否抛出错误,默认true,抛出
###### 返回:
合法返回true;否则,返回false。
##### 6. 根据时间范围字符串转换为时间段对象
TimeSpan GetTimeSpanFromString(string timespan,bool throwError = true)
###### 参数:
timespan:时间范围字符串,单位支持ms, s, m, h, d;如:1s,代表1秒
throwError:格式不合法时是否抛出错误,默认true,抛出
###### 返回:
返回转换后的时间段对象。
### HashTool API
##### 1. MD5哈希计算
string MD5(string text, string encoding = "utf-8")
###### 参数:
text:待哈希计算的字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
经过MD5哈希计算的字符串
##### 2. SHA1哈希计算
string SHA1(string text, string encoding = "utf-8")
###### 参数:
text:待哈希计算的字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
经过SHA1哈希计算的字符串
##### 3. SHA256计算
string SHA256(string text, string encoding = "utf-8")
###### 参数:
text:待哈希计算的字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
经过SHA256哈希计算的字符串
##### 4. SHA384计算
string SHA384(string text, string encoding = "utf-8")
###### 参数:
text:待哈希计算的字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
经过SHA384哈希计算的字符串
##### 5. SHA512计算
string SHA512(string text, string encoding = "utf-8")
###### 参数:
text:待哈希计算的字符串
encoding:指定字符编码格式,默认utf-8
###### 返回:
经过SHA512哈希计算的字符串
### RegexTool API
##### 1. 判断是否手机号
bool IsMobile(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效手机号返回true,否则返回false。
##### 2. 判断是否电子邮箱
bool IsEmail(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效电子邮箱返回true,否则返回false。
##### 3. 判断是否网址
bool IsUrl(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效网址返回true,否则返回false。
##### 4. 判断是否IPv4地址
bool IsIP(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效IPv4地址返回true,否则返回false。
##### 5. 判断是否数值
bool IsNumber(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效数值返回true,否则返回false。
##### 6. 判断是否整数
bool IsInteger(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效整数返回true,否则返回false。
##### 7. 判断是否正整数
bool IsPositiveInteger(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效正整数返回true,否则返回false。
##### 8. 判断是否自然数
bool IsNaturalInteger(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效自然数返回true,否则返回false。
##### 9. 判断是否小数
bool IsDecimal(string value)
###### 参数:
value:要判断的字符串内容。
###### 返回:
是有效小数返回true,否则返回false。
### TypeTool API
##### 1. 判断指定对象是否为List类型
bool IsList(object obj)
###### 参数:
obj: 待判断类型的对象。
###### 返回:
是返回true;否则,返回false。
### XmlTool API
##### 1. Xml节点遍历方法(从文件加载内容)
void Iterate(string file, XmlNodeInfoGetter callback = null)
###### 参数:
file:待遍历的XML文件绝对路径
callback:回调函数,可在回调函数中进行节点信息解析和收集
##### 2. Xml节点遍历方法(从字符串加载内容)
void IterateFromString(string content, [XmlNodeInfoGetter](#xmlnodeinfogetter) callback = null)
###### 参数:
content:待遍历的XML文件内容
callback:回调函数,可在回调函数中进行节点信息解析和收集
##### 3. XmlNodeInfoGetter回调方法定义
bool XmlNodeInfoGetter([XmlNodeInfo](#xmlnodeinfo) nodeInfo);
###### 参数:
nodeInfo:当前遍历到的节点对象
###### 返回:
返回true,程序继续向下遍历;否则,停止遍历。
##### 4. XmlNodeInfo对象
##### 属性:
Path:返回当前节点路径,如:/root/person
LocalName:返回当前节点的本地名称
FullName:返回当前节点的全名称,包括命名空间和本地名称
NamespaceURI:返回当前节点的命名空间URI
IsRoot:是否根节点
IsNode:返回当前节点是否元素节点
IsEndNode:遍历过程会两次经过一个节点,一次开始,一次结束,该属性返回是否为结束一次的遍历
IsTextNode:返回当前节点是否为文本节点
IsCDATANode:返回当前节点是否为CDATA节点
Level:节点级别
Text:返回当前节点的文本内容
CData:返回CDATA节点的内容
AttributeCount:返回节点属性的数量
Line:返回当前节点在文件中的行数
##### 方法:
bool HasAttributes()
###### 返回:
返回当前节点是否包括属性信息
string GetAttribute(int index)
###### 参数:
index:指定属性的索引位置
###### 返回:
返回指定索引位置的属性的内容
string GetAttribute(string name)
###### 参数:
name:指定属性的名称
###### 返回:
返回指定名称的属性的内容
string GetAttribute(string localName, string namespaceURI)
###### 参数:
localName:指定属性的本地名称
namespaceURI:指定属性的命名空间URI
###### 返回:
返回指定名称和命名空间的属性的内容
##### 5. 反序列化动态对象的方法(从文件加载内容)
dynamic Deserialize(string file, bool includeRoot = false)
###### 参数:
file:待反序列化的XML文件绝对路径
inculdeRoot:是否包含根节点
###### 返回:
返回序列化之后的动态对象。
##### 6. 反序列化动态对象的方法(从字符串加载内容)
dynamic DeserializeFromString(string xml, bool includeRoot = false)
###### 参数:
xml:待反序列化的XML内容
inculdeRoot:是否包含根节点
###### 返回:
返回序列化之后的动态对象。
### MailTool API
##### 1. 同步发送普通邮件(方法一)
void Send(string subject, string body, string bodyEncoding,
string from, string fromName, string to, string replyTo, string cc, string bcc,
params string[] attachments)
###### 参数:
subject:邮件标题
body:邮件正文内容
bodyEncoding:邮件正文内容编码格式
from:发件人地址
fromName:发件人显示名称
to:收件人地址,多个用分号分隔
replyTo:回复地址,多个用分号分隔
cc:抄送地址,多个用分号分隔
bcc:秘密抄送地址,多个用分号分隔
attachments:附件文件路径
##### 2. 同步发送普通邮件(方法二)
void Send(string subject, string body,
string from, string to, params string[] attachments)
###### 参数:
subject:邮件标题
body:邮件正文内容
from:发件人地址
to:收件人地址,多个用分号分隔
attachments:附件文件路径
##### 3. 同步发送网页邮件(方法一)
void SendHtml(string subject, string body, string bodyEncoding,
string from, string fromName, string to, string replyTo, string cc, string bcc,
params string[] attachments)
###### 参数:
subject:邮件标题
body:邮件正文内容(网页格式)
bodyEncoding:邮件正文内容编码格式
from:发件人地址
fromName:发件人显示名称
to:收件人地址,多个用分号分隔
replyTo:回复地址,多个用分号分隔
cc:抄送地址,多个用分号分隔
bcc:秘密抄送地址,多个用分号分隔
attachments:附件文件路径
##### 4. 同步发送网页邮件(方法二)
void SendHtml(string subject, string body,
string from, string to, params string[] attachments)
###### 参数:
subject:邮件标题
body:邮件正文内容(网页格式)
from:发件人地址
to:收件人地址,多个用分号分隔
attachments:附件文件路径
##### 注:SendAsync、SendHtmlAsync相关方法请参照对应同步方法使用方式。
### CaptchaTool API
##### 1. 随机生成字母数字混合验证码
string Random(int len = 6)
###### 参数:
len:验证码位数,默认6。
###### 返回:
生成的验证码。
##### 2. 随机生成数字验证码
string RandomOnlyNumber(int len = 6)
###### 参数:
len:验证码位数,默认6。
###### 返回:
生成的验证码。
##### 3. 生成图形验证码
void Build(int width, int height, string code, out MemoryStream stream)
###### 参数:
width:验证码图片的宽度
height:验证码图片的高度
code:图片中显示的验证码内容
stream:输出生成的验证码图片的字节流对象
##### 4. 生成图形验证码
void Build(int width, int height, out MemoryStream stream,
out string code, bool onlyNumber, int codeLength = 6)
###### 参数:
width:验证码图片的宽度
height:验证码图片的高度
stream:输出生成的验证码图片的字节流对象
code:随机生成验证码字符并返回
onlyNumber:生成验证码字符是否只包含数字
codeLength:验证码字符的位数,默认为6
### JsonTool API
##### 1. 获取Json配置文件解析器实例
[JsonConfigParser](#jsonconfigparser) ConfigParser()
### JsonConfigParser API
##### 1. 添加要解析的Json配置文件
JsonConfigParser AddJsonFile(string path)
###### 参数:
path:Json配置文件全路径
###### 返回:
返回Json配置文件解析器本身,可链式调用,增加多个配置文件,配置文件中有相同项,后添加的优先。
##### 2. 将添加的Json配置文件内容解析为动态对象
dynamic Parse(string jsonStr=null)
###### 参数:
jsonStr:除了可以通过添加配置文件转换动态对象,还可以直接传递一个Json字符串来转换动态对象;可选。
###### 返回:
将Json配置文件的内容转换为[DynamicObjectExt](#dynamicobjectext)实例并返回。
### DynamicObjectExt 动态对象
DynamicObjectExt是对DynamicObject的扩展。使用时,可以直接进行属性赋值,并可通过内置方法读、写、判断和删除等操作。
```c#
dynamic obj = new DynamicObjectExt();
obj.Name = "wangxm";
obj.Age = 18;
if (obj.Has("Age"))
{
//TODO
}
```
#### 方法:
##### 1. 尝试设置属性内容
bool TrySetValue(string name, object value)
###### 参数:
name: 要设置的属性名
value: 属性值
###### 返回:
设置成功返回true;否则,返回false。
##### 2. 尝试读取属性内容
bool TryGetValue(string name, out object result)
###### 参数:
name: 要读取的属性名
result: 读取成功后数据的内容
###### 返回:
读取成功返回true;否则,返回false。
##### 3. 根据路径设置属性内容
bool SetValueByPath(string path, object value)
###### 参数:
path: 属性完整路径,用点连接;如User.Name。
value: 属性值
###### 返回:
设置成功返回true;否则,返回false。
##### 4. 判断属性是否存在
bool Has(string key)
###### 参数:
key: 要判断的属性
###### 返回:
属性存在返回true;否则,返回false。
##### 5. 判断路径是否存在
bool HasPath(string path)
###### 参数:
path: 要判断的路径,多个由点分隔。
###### 返回:
路径存在返回true;否则,返回false。
##### 6. 删除指定属性
bool Remove(string key)
###### 参数:
key: 要删除的属性
###### 返回:
删除成功返回true;否则,返回false。
##### 7. 删除指定路径
bool RemovePath(string path)
###### 参数:
path: 要删除的路径,多个由点分隔。
###### 返回:
删除成功返回true;否则,返回false。
##### 8. 将对象序列化为Json字符串
string ToString()
###### 参数:
无。
###### 返回:
序列化之后的Json字符串。
##### 9. 将对象序列化为XML字符串
string ToXMLString(string defaultNS = "")
###### 参数:
defaultNS:转换时XML的默认命名空间,默认为空。
###### 返回:
序列化之后的XML字符串。
#### 属性:
##### 1. 获取对象所有属性
Dictionary.KeyCollection Keys
##### 2. 以索引器形式通过key获取对应属性内容
dynamic this[string key]
### WebTool API
##### 1. 获取HttpClientExt对象实例
[HttpClientExt](#httpclientext) Client(string name="default")
###### 参数:
name:实例标识,同一标识不会反复实例化对象。
###### 返回:
返回HttpClientExt对象实例。
##### 2. 获取Web安全操作对象
[HttpSecurity](#httpsecurity) Security()
###### 参数:
无。
###### 返回:
返回HttpSecurity对象实例。
### HttpClientExt API
#### 方法:
##### 1. 增加默认请求头,对后续所有请求起作用
HttpClientExt AddDefaultHeader(string name, string value)
###### 参数:
name: Header名称
value: Header值
###### 返回:
当前HttpClientExt实例,可链式调用。
##### 2. 增加临时性请求头,仅在本次请求起作用
HttpClientExt AddRequestHeader(string name, string value)
###### 参数:
name: Header名称
value: Header值
###### 返回:
当前HttpClientExt实例,可链式调用。
##### 3. 设置JSON格式请求体内容
HttpClientExt SetJsonContent(string content)
###### 参数:
content: 字符串格式Json内容
###### 返回:
当前HttpClientExt实例,可链式调用。
##### 4. 设置JSON格式请求体内容
HttpClientExt SetJsonContent(dynamic content)
###### 参数:
content: 可转换成Json格式的动态对象,建议使用JsonDynamicObject对象
###### 返回:
当前HttpClientExt实例,可链式调用。
##### 5. 提交一个Get请求,并获取请求返回结果
[HttpResponseExt](#httpresponseext) GetJsonAsync(string requestUri)
###### 参数:
requestUri:请求地址
###### 返回:
返回请求结果对象。
##### 4. 提交一个Get请求,并获取请求返回结果
[HttpResponseExt](#httpresponseext) GetJson(string requestUri)
###### 参数:
requestUri:请求地址
###### 返回:
返回请求结果对象。
##### 注:Post、Put、Delete、Head、Options相关请求方法请参照GetJsonAsync、GetJson。
#### 属性:
##### 1. 获取或设置超时时间
TimeSpan Timeout
##### 2. 获取或设置请求基本地址
Uri BaseAddress
### HttpResponseExt API
#### 属性:
##### 1. 获取请求的状态码
HttpStatusCode StatusCode
##### 2. 获取请求反馈的字符串内容
string Content
##### 3. 将请求反馈的字符串按照Json格式解析,并返回解析后的动态对象(如果字符串不是Json格式将抛出异常)
dynamic Json
##### 4. 将请求反馈的字符串按照Xml格式解析,并返回解析后的动态对象(如果字符串不是Xml格式将抛出异常)
dynamic Xml
### HttpSecurity API
##### 1. XSS安全过滤方法
string Xss(string str)
###### 参数:
str:要进行XSS处理的字符串。
###### 返回:
按照规则处理后的字符串。