Healnet.Common 3.0.0

dotnet add package Healnet.Common --version 3.0.0
                    
NuGet\Install-Package Healnet.Common -Version 3.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Healnet.Common" Version="3.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Healnet.Common" Version="3.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Healnet.Common" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Healnet.Common --version 3.0.0
                    
#r "nuget: Healnet.Common, 3.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Healnet.Common@3.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Healnet.Common&version=3.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Healnet.Common&version=3.0.0
                    
Install as a Cake Tool

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):原 StringHelperDateHelperDateTimeHelperCollectionHelperEncryptionHelperReflectionHelperConfigurationHelper 等静态助手类已删除,其功能已并入对应的扩展方法类(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/EndsWithIgnoreCaseIsEmail/IsPhoneNumber/IsIdCard/IsUrl/IsGuid、HTML 标签移除、ToSlug/ToSnakeCase/ToKebabCase/ToPascalCase/ToCamelCase、遮罩(Mask/MaskEmail/MaskPhone)、FormatWithSplitTrimJoinStrings、数值判断(IsNumeric/IsInteger/IsDecimal)、ReplaceIgnoreCase/RemoveDiacritics/RemoveExtraSpaces/Capitalize/CapitalizeEachWord/EqualsIgnoreCase/SubstringSafe
ObjectExtensions object? IsNull/IsNotNullAs<T>/ConvertTo<T>ToJson/FromJsonToQueryStringHasProperty/GetPropertyValue/SetPropertyValueToDictionaryGetTypeNameIsDefault<T>
DateTimeExtensions DateTime StartOfDay/EndOfDay/StartOfWeek/StartOfMonth/StartOfQuarter/StartOfYear(及对应 End)、GetAgeAddBusinessDaysToUnixTimestamp/FromUnixTimestampIsWeekend/IsWeekdayGetDaysBetween/GetBusinessDaysBetweenParseDate/TryParseDate/FormatConvertTimeZone/ConvertToUtc/ConvertFromUtc
CollectionExtensions IEnumerable<T> / IList<T> IsNullOrEmpty/HasValue/EmptyIfNullFirstOrDefaultSafe/LastOrDefaultSafeAsReadOnly/ToHashSetForEach/ForEachAsync/ForEachParallelAsyncCountSafeToDelimitedStringBatchDistinctByElementAtOrDefaultSafe

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")、LocalStoragePathBaseUrlMaxFileSize(50MB)、AllowedExtensionsOssEndpoint/OssAccessKeyId/OssAccessKeySecret/OssBucketName
FileUploadResult / FileInfoDto 结果 DTO
Excel 子命名空间 IExcelService + ExcelService(ClosedXML)
Pdf 子命名空间 IPdfService + PdfService(QuestPDF)

5. 其他模块

模块 命名空间 说明
映射扩展 Healnet.Common.Mapping MapsterExtensionsAddMapster/AddMapsterWithProfiles/MapTo/MapToList)、MappingProfile(abstract)、TypeAdapterSetter
验证扩展 Healnet.Common.Validation FluentValidationExtensionsAddFluentValidation/AddValidator<TValidator,TEntity>)、IValidationService/ValidationServiceValidationResultDto/ValidationErrorDto、扩展 AbstractValidator<T>RuleForEmail/Phone/Url/Password/ChineseName/IdCard
业务枚举 Healnet.Common.Enums ServiceStatusLogLevelCacheTypeDatabaseTypeMessageQueueTypeApiResponseCodeGenderAuditActionDataStatus
应用常量 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 新增 EnvironmentHelperNetworkHelperRandomHelperServiceAddressHelper;重构 IdGeneratorIdGeneratorFactory 门面
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Healnet.Common:

Package Downloads
Healnet.Infrastructure

Healnet.Infrastructure 是 Healnet 框架的基础设施层类库,提供各种基础设施服务的封装和集成,包括 Consul 服务发现、Redis 缓存、RabbitMQ 消息队列、gRPC、Elasticsearch、Milvus 向量数据库、SQLSugar ORM、JWT 认证、YARP 反向代理、OpenTelemetry 可观测性、Serilog 日志框架、ClickHouse 列式数据库等。

Healnet.Core

Healnet.Core 是 Healnet 框架的核心业务层类库,提供领域层的基础接口和通用服务。包含仓储接口、工作单元、消息队列接口和统一异常处理。

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.0.0 56 7/16/2026
2.0.7 109 7/10/2026
2.0.5 113 7/8/2026
2.0.3 117 6/30/2026
2.0.1 102 6/30/2026
2.0.0 116 6/29/2026
1.7.3 113 6/29/2026
1.5.0 143 6/16/2026
1.4.0 116 6/15/2026
1.2.0 120 5/29/2026
1.1.1 118 5/25/2026
1.1.0 120 5/22/2026
1.0.9 123 5/20/2026
1.0.8 118 5/20/2026
1.0.7 113 5/20/2026
1.0.6 142 5/19/2026
1.0.5 162 5/13/2026
1.0.4 125 5/13/2026
1.0.3 122 5/13/2026
1.0.2 117 5/13/2026
Loading failed

v3.0.0: 重大变更(破坏性):AESCrypto 移除硬编码密钥与无参重载 AESEncrypt(string)/AESDecrypt(string),密钥改由调用方显式传入;AESDecrypt 返回 (bool Ok, string? Result)(解密失败返回 (false, null),不再静默吞异常);GetSubString 跨平台编码 Encoding.Default→UTF8。调用方升级须显式传密钥(且须与历史加密密钥一致,否则既有密文无法解密)。v2.0.7: 三库版本统一 2.0.7(无代码变更)。v2.0.6: 三库版本统一 2.0.6。v2.0.3: 统一三库版本号;升级目标框架至 net10.0;更新所有依赖包至最新稳定版。v2.0.1: 依赖包版本升级,修复若干已知问题。v2.0.0: 重大版本更新,目标框架从 net8.0 升级至 net10.0,全面更新依赖包版本。