folder-config
folder
folder
folder
csharp
csharp
csharp
csharp
csharp
csharp
csharp
csharp
csharp

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"
  }
}

⚠️ 注意事项

  1. MongoDB 序列化: 使用 Date 类型时需要注册 DateSerializationProvider
  2. 限流中间件: 需要配合 Redis 或内存缓存使用
  3. 拦截规则: 支持通配符匹配,使用 * 作为通配符

🔗 相关文档

📄 许可证

Copyright © dpangzi

🔄 更新日志

1.0.1.0

  • 升级至 .NET 10.0
  • 更新所有依赖包至最新版本
  • 完善 IP 限流功能
  • 添加请求拦截规则支持

历史更新

2019年12月18日:新增 ViewModel 自动化查询

  • 实现 IMapFrom<TEntity> 接口的 ViewModel
  • 根据特性 ViewModelLabelAttribute 标识查询字段
  • 已实现操作符:EqualNotEqual、String 类型的 Contains
评论加载中...