Healnet.Common 通用模块
版本: v2.0.6 | TFM: net10.0 | 独立引用(零上层依赖) | NuGet: Healnet.Common 2.0.6
概述
Healnet.Common 是 Healnet 微服务框架的基础通用工具类库,提供跨项目共享的加密工具、JSON 序列化、分布式 ID 生成、扩展方法、DTO 基类、文件/Excel/Pdf 处理、Mapster 映射与 FluentValidation 验证等功能。作为整个框架的底层依赖(被 Core、Infrastructure 以及业务服务引用),Common 不引用任何上层模块,仅依赖少量通用 NuGet 包。
⚠️ 重要变更(2.x):原 StringHelper、DateHelper、DateTimeHelper、CollectionHelper、EncryptionHelper、ReflectionHelper、ConfigurationHelper 等静态助手类已删除,其功能已并入对应的扩展方法类(StringExtensions / DateTimeExtensions / CollectionExtensions)或现有 Helper。请勿在新代码中引用这些已删除的类。
核心特性
- ✅ 加密工具 -
CryptoHelper(PBKDF2 哈希、AES/RSA)、AESCrypto(AES 加解密)
- ✅ JSON 序列化 -
JsonHelper(System.Text.Json 封装:序列化/反序列化/克隆/合并/格式化)
- ✅ 雪花 ID -
IdGeneratorFactory + SnowflakeIdGenerator(分布式唯一 ID)
- ✅ 扩展方法 -
StringExtensions / ObjectExtensions / DateTimeExtensions / CollectionExtensions
- ✅ DTO 基类 -
BaseDto / AuditableDto / PaginationDto
- ✅ 文件存储 -
IFileService / FileServiceBase / LocalFileService / OssFileService(抽象)+ ExcelService(ClosedXML)/ PdfService(QuestPDF)
- ✅ Mapster 映射 -
MapsterExtensions
- ✅ FluentValidation -
FluentValidationExtensions + ValidationService
- ✅ 业务枚举 -
BusinessEnums
- ✅ 应用常量 -
AppConstants(缓存键、HTTP 头、Claim 类型、日期格式、错误消息)
- ✅ 集成事件 -
IntegrationEvent
- ✅ 网络/随机/验证/环境工具 -
NetworkHelper / RandomHelper / ValidationHelper / EnvironmentHelper / ServiceAddressHelper
核心组件
1. 工具类 (Helpers) — 命名空间 Healnet.Common.Helpers
| 类 |
说明 |
CryptoHelper |
密码哈希(HashPassword/VerifyPassword,PBKDF2 + 随机盐)、AES/RSA 加解密、GenerateRandomString/GenerateGuid/GenerateTimestamp/GenerateToken、MD5/SHA256/SHA512 |
AESCrypto |
AES 对称加解密。⚠️ 密钥不再内置:AESEncrypt(plain, key) / AESDecrypt(cipher, key) → (bool Ok, string? Result),调用方必须显式传入密钥(建议从配置读取);解密失败返回 (false, null) 以便区分“解密失败”与“空结果”。⚠️ 旧式 Rijndael 实现,后续将与 CryptoHelper 合并 |
JsonHelper |
Serialize/SerializeIndented/Deserialize(×3)/SerializeToBytes/Parse/Clone/Merge/Format/Minify/IsValid |
IdGeneratorFactory + SnowflakeIdGenerator + IIdGenerator + SnowflakeOptions |
雪花算法分布式 ID:IdGeneratorFactory.Default / NewId() / Create(workerId, datacenterId) |
NetworkHelper |
本机 IP(IPv4/IPv6)/MAC、主机名/域名、DNS 解析、端口占用检测(IsPortInUse/FindAvailablePort/TestPort)、Ping、网络接口信息 |
RandomHelper |
Next/NextDouble/NextBoolean/NextString/NextNumericString/NextEmail/NextIdCard/NextFromList 等(非密码学安全,适合测试/模拟数据) |
ValidationHelper |
IsValidEmail/IsValidPhone/IsValidUrl/IsValidGuid/IsValidIpAddress/IsValidPort/IsValidPassword/IsValidIdCard/IsValidChineseName/IsValidBankCard/IsValidCreditCard/IsValidHexColor/IsValidDateTime/IsValidJson/IsValidXml/IsValidHtml |
EnvironmentHelper |
环境变量读写、运行环境识别(IsDevelopment/Staging/Production)、OS/进程/架构信息、临时目录、运行时版本 |
ServiceAddressHelper |
K8s/Docker/本地环境服务地址解析(GetServiceAddress/GetServiceUrl/GetHealthCheckUrl/GetServiceId),支持 IsKubernetesEnvironment/IsDockerEnvironment |
2. 扩展方法 (Extensions) — 命名空间 Healnet.Common.Extensions
| 类 |
扩展类型 |
说明 |
StringExtensions |
string |
判空(IsNullOrEmpty/IsNullOrWhiteSpace/HasValue)、安全裁剪、类型转换(ToIntSafe/ToLongSafe/ToDateTimeSafe)、大小写安全转换、Contains/StartsWith/EndsWithIgnoreCase、IsEmail/IsPhoneNumber/IsIdCard/IsUrl/IsGuid、HTML 标签移除、ToSlug/ToSnakeCase/ToKebabCase/ToPascalCase/ToCamelCase、遮罩(Mask/MaskEmail/MaskPhone)、FormatWith、SplitTrim、JoinStrings、数值判断(IsNumeric/IsInteger/IsDecimal)、ReplaceIgnoreCase/RemoveDiacritics/RemoveExtraSpaces/Capitalize/CapitalizeEachWord/EqualsIgnoreCase/SubstringSafe |
ObjectExtensions |
object? |
IsNull/IsNotNull、As<T>/ConvertTo<T>、ToJson/FromJson、ToQueryString、HasProperty/GetPropertyValue/SetPropertyValue、ToDictionary、GetTypeName、IsDefault<T> |
DateTimeExtensions |
DateTime |
StartOfDay/EndOfDay/StartOfWeek/StartOfMonth/StartOfQuarter/StartOfYear(及对应 End)、GetAge、AddBusinessDays、ToUnixTimestamp/FromUnixTimestamp、IsWeekend/IsWeekday、GetDaysBetween/GetBusinessDaysBetween、ParseDate/TryParseDate/Format、ConvertTimeZone/ConvertToUtc/ConvertFromUtc |
CollectionExtensions |
IEnumerable<T> / IList<T> |
IsNullOrEmpty/HasValue/EmptyIfNull、FirstOrDefaultSafe/LastOrDefaultSafe、AsReadOnly/ToHashSet、ForEach/ForEachAsync/ForEachParallelAsync、CountSafe、ToDelimitedString、Batch、DistinctBy、ElementAtOrDefaultSafe |
3. 数据传输对象 (Models) — 命名空间 Healnet.Common.Models
| 类 |
说明 |
BaseDto / BaseDto<TKey> |
DTO 基类:Id |
AuditableDto / AuditableDto<TKey> |
可审计 DTO:CreatedAt/CreatedBy/UpdatedAt/UpdatedBy |
PaginationDto |
分页参数:Page/PageSize/SortBy/SortDirection + GetSkipCount()/NeedSorting()/IsAscending() |
⚠️ ApiResponse / PagedResult / Result 不存在于 Common(它们在 Healnet.Core.Responses)。
4. 文件存储 (FileStorage) — 命名空间 Healnet.Common.FileStorage
| 类型 |
说明 |
IFileService |
文件服务抽象(上传/下载/删除/生成访问 URL) |
FileServiceBase (abstract) |
基类,持有 FileStorageOptions _options |
LocalFileService |
本地文件系统实现 |
OssFileService (abstract) |
对象存储基类(具体实现由宿主/Infrastructure 提供,如 AliyunOssFileService) |
FileStorageOptions |
StorageType(默认 "Oss")、LocalStoragePath、BaseUrl、MaxFileSize(50MB)、AllowedExtensions、OssEndpoint/OssAccessKeyId/OssAccessKeySecret/OssBucketName |
FileUploadResult / FileInfoDto |
结果 DTO |
Excel 子命名空间 |
IExcelService + ExcelService(ClosedXML) |
Pdf 子命名空间 |
IPdfService + PdfService(QuestPDF) |
5. 其他模块
| 模块 |
命名空间 |
说明 |
| 映射扩展 |
Healnet.Common.Mapping |
MapsterExtensions(AddMapster/AddMapsterWithProfiles/MapTo/MapToList)、MappingProfile(abstract)、TypeAdapterSetter |
| 验证扩展 |
Healnet.Common.Validation |
FluentValidationExtensions(AddFluentValidation/AddValidator<TValidator,TEntity>)、IValidationService/ValidationService、ValidationResultDto/ValidationErrorDto、扩展 AbstractValidator<T>(RuleForEmail/Phone/Url/Password/ChineseName/IdCard) |
| 业务枚举 |
Healnet.Common.Enums |
ServiceStatus、LogLevel、CacheType、DatabaseType、MessageQueueType、ApiResponseCode、Gender、AuditAction、DataStatus |
| 应用常量 |
Healnet.Common.Constants |
AppConstants(含嵌套 CacheKeys/HttpHeaders/ClaimTypes/DateTimeFormats/ErrorMessages) |
| 集成事件 |
Healnet.Common.Events |
IntegrationEvent(抽象基类:EventId/EventName/Timestamp/CorrelationId/SourceService/Version) |
依赖关系
graph LR
A[Healnet.Common] --> B[FluentValidation]
A --> C[Mapster]
A --> D[ClosedXML]
A --> E[QuestPDF]
A --> F[Microsoft.AspNetCore.Http.Abstractions]
使用指南
1. 加密与哈希
using Healnet.Common.Helpers;
// 密码哈希(自动随机盐值,无需手动传盐)
var hashed = CryptoHelper.HashPassword("myPassword");
var isValid = CryptoHelper.VerifyPassword("myPassword", hashed);
// 安全 Token(密码学安全随机)
var token = CryptoHelper.GenerateRandomString(32);
// AES 加解密
string key = CryptoHelper.GenerateAesKey();
string encrypted = CryptoHelper.AesEncrypt("Hello", key);
string decrypted = CryptoHelper.AesDecrypt(encrypted, key);
2. JSON 序列化
using Healnet.Common.Helpers;
var obj = new { Name = "Healnet", Version = "2.0.6" };
string json = JsonHelper.Serialize(obj);
var result = JsonHelper.Deserialize<MyModel>(json);
string safeJson = JsonHelper.Serialize(obj, new JsonSerializerOptions { WriteIndented = true });
3. 雪花 ID 生成
using Healnet.Common.Helpers;
// 默认实例
long id = IdGeneratorFactory.NewId();
// 自定义实例(数据中心 + 工作区)
var gen = IdGeneratorFactory.Create(workerId: 1, datacenterId: 1);
long customId = gen.NextId();
4. 扩展方法
using Healnet.Common.Extensions;
// 字符串
string name = " Hello World ";
bool isEmpty = name.IsNullOrWhiteSpace();
string base64 = name.ToBase64();
string masked = "13800138000".MaskPhone(); // "138****8000"
bool isEmail = "test@example.com".IsEmail();
string slug = "Hello World".ToSlug(); // "hello-world"
// 日期
DateTime now = DateTime.Now;
bool isWeekend = now.IsWeekend();
int days = now.GetDaysBetween(new DateTime(2026, 1, 1));
var ts = now.ToUnixTimestamp();
// 集合
var list = new List<int> { 1, 2, 3, 4, 5 };
var paged = list.Batch(2); // 分批
var safe = list.EmptyIfNull();
5. DTO 基类
using Healnet.Common.Models;
public class UserDto : AuditableDto
{
public string Name { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
}
public class QueryParams : PaginationDto
{
public string? Keyword { get; set; }
}
6. 文件 / Excel / Pdf
using Healnet.Common.FileStorage;
using Healnet.Common.FileStorage.Excel;
// Excel 导出/导入
var data = new List<UserDto> { /* ... */ };
await excelService.ExportAndSaveAsync(data, "users.xlsx");
var imported = await excelService.ImportFromSavedFileAsync<UserDto>("users.xlsx");
7. 依赖注入注册(分模块,无聚合入口)
// 各模块独立注册,Common 不提供 AddCommonServices 聚合方法
builder.Services.AddMapster();
builder.Services.AddFluentValidation();
builder.Services.AddFileService(opt => { /* FileStorageOptions */ });
builder.Services.AddExcelService();
builder.Services.AddPdfService();
NuGet 包信息
| 属性 |
值 |
| PackageId |
Healnet.Common |
| 当前版本 |
2.0.6 |
| 目标框架 |
net10.0 |
| 主要依赖 |
FluentValidation [11.0.0,12.0.0)、Mapster [7.4.0,8.0.0)、ClosedXML [0.102.0,0.103.0)、QuestPDF [2024.3.0,2025.0.0)、Microsoft.AspNetCore.Http.Abstractions [2.2.0,3.0.0) |
| 仓库 |
内部仓库 |
版本历史
| 版本 |
日期 |
变更说明 |
| v2.0.6 |
2026-07-10 |
三库版本统一 2.0.6;Common 无代码变更 |
| v2.0.4 |
2026-07-08 |
代码审查清理:合并 StringHelper/DateHelper/CollectionHelper 到扩展方法并删除旧类;移除 Debug.WriteLine 调试输出;0 错误 0 警告 |
| v2.0.0 |
— |
版本统一升级至 2.x;移除 Newtonsoft.Json;重构为扩展方法优先 |
| v1.5.0 |
2026-06-16 |
新增 EnvironmentHelper、NetworkHelper、RandomHelper、ServiceAddressHelper;重构 IdGenerator 为 IdGeneratorFactory 门面 |