Dpz.Core.Infrastructure
dpz.core 系统公共基础设施组件库。
版本: 1.0.1.0
目标框架: .NET 10.0
📋 主要特性
核心组件
- ✅ 应用程序扩展: 提供应用初始化和配置扩展方法
- ✅ 数据库工具: MongoDB 相关的默认配置和工具类
- ✅ 异常处理: 业务异常、配置异常等自定义异常类型
- ✅ 日期处理: 自定义日期类型和序列化支持
- ✅ Excel 操作: 基于 NPOI 的 Excel 导入导出功能
- ✅ IP 限流: 完整的 IP 访问频率限制中间件
- ✅ 请求拦截: 支持 UserAgent、IP、URI 等多维度的请求拦截规则
- ✅ 对象存储: 又拍云对象存储操作封装
- ✅ 日志集成: Seq 日志中心配置类
- ✅ 文件处理: TagLib 音频文件信息读取支持
🔧 技术栈
- .NET: 10.0
- MongoDB: MongoDB.Driver 3.7.0
- Excel: NPOI 2.7.6
- Markdown: Markdig 1.1.1
- HTML 解析: AngleSharp 1.4.0
- 序列化: MessagePack.Annotations 3.1.4
- 日志: Serilog 4.3.1
💡 使用示例
应用程序初始化
DpzAppBuilderExtensions 系统扩展:
// 系统初始化
app.Init();
IP 限流中间件
配置示例:
{
"RateLimit": {
"EnableRateLimiting": true,
"DefaultRequestsPerMinute": 60,
"WhitelistedIps": ["127.0.0.1", "::1"]
}
}
注册服务:
// 注册 IP 限流服务
services.AddSingleton<IpRateLimitService>();
// 添加中间件
app.UseMiddleware<RateLimitMiddleware>();
请求拦截规则
配置示例:
{
"InterceptRules": [
{ "Type": "UserAgent", "Pattern": "*bot*" },
{ "Type": "ClientIp", "Pattern": "192.168.1.*" },
{ "Type": "Uri", "Pattern": "/admin/*" }
]
}
使用方法:
services.AddScoped<IInterceptRuleService, InterceptRuleService>();
// 在中间件中使用
var shouldIntercept = interceptRuleService.ShouldIntercept(context);
业务异常处理
// 抛出业务异常
throw new BusinessException("业务逻辑错误信息");
// 抛出配置异常
throw new InvalidConfigurationException("配置错误信息");
// 抛出已存在异常
throw new ExistsException("资源已存在");
Excel 导出
使用 ExportMarkAttribute 标记需要导出的属性:
public class ExportModel
{
[ExportMark("姓名")]
public string Name { get; set; }
[ExportMark("年龄")]
public int Age { get; set; }
}
📦 安装
NuGet 包
dotnet add package Dpz.Core.Infrastructure
项目引用
<ItemGroup>
<ProjectReference Include="..\Dpz.Core.Infrastructure\Dpz.Core.Infrastructure.csproj" />
</ItemGroup>
📚 组件说明
Date 类型
自定义的日期类型,支持 MongoDB 序列化:
public class Entity
{
public Date BirthDate { get; set; }
}
UpyunOperator
又拍云对象存储操作封装:
var upyun = new UpyunOperator(bucketName, operatorName, password);
// 上传、下载、删除等操作
LogSeq
Seq 日志中心配置:
{
"LogSeq": {
"ServerUrl": "https://logs.dpangzi.com",
"ApiKey": "your-api-key"
}
}
⚠️ 注意事项
- MongoDB 序列化: 使用
Date类型时需要注册DateSerializationProvider - 限流中间件: 需要配合 Redis 或内存缓存使用
- 拦截规则: 支持通配符匹配,使用
*作为通配符
🔗 相关文档
- RateLimiting README - IP 限流详细文档
📄 许可证
Copyright © dpangzi
🔄 更新日志
1.0.1.0
- 升级至 .NET 10.0
- 更新所有依赖包至最新版本
- 完善 IP 限流功能
- 添加请求拦截规则支持
历史更新
2019年12月18日:新增 ViewModel 自动化查询
- 实现
IMapFrom<TEntity>接口的 ViewModel - 根据特性
ViewModelLabelAttribute标识查询字段 - 已实现操作符:
Equal、NotEqual、String 类型的Contains
评论加载中...