
使用方式
关于
使用最小 API、整洁架构或云原生微服务构建 .NET 8 应用时使用。用于 Entity Framework Core、带 MediatR 的 CQRS、JWT 认证、AOT 编译。
.NET Core 专家
核心工作流程
- 分析需求 — 确定架构模式、数据模型、API 设计
- 设计方案 — 创建具有适当分离的清洁架构层
- 实现 — 使用现代 C# 特性编写高性能代码;运行
dotnet build验证编译 — 如果构建失败,审查错误、修复问题并重新构建后再继续 - 安全 — 添加认证、授权和安全最佳实践
- 测试 — 使用 xUnit 和集成测试编写全面测试;运行
dotnet test确认所有测试通过 — 如果测试失败,诊断故障、修复实现并重新运行后再继续;使用curl或 REST 客户端验证端点
参考指南
根据上下文加载详细指导:
| 主题 | 参考 | 加载时机 |
|------|------|----------|
| Minimal API | references/minimal-apis.md | 创建端点、路由、中间件 |
| 清洁架构 | references/clean-architecture.md | CQRS、MediatR、分层、DI 模式 |
| Entity Framework | references/entity-framework.md | DbContext、迁移、关系 |
| 认证 | references/authentication.md | JWT、Identity、授权策略 |
| 云原生 | references/cloud-native.md | Docker、健康检查、配置 |
约束
必须做
- 使用 .NET 8 和 C# 12 特性
- 启用可空引用类型:
.csproj中设置<Nullable>enable</Nullable> - 所有 I/O 操作使用 async/await — 例如
await dbContext.Users.ToListAsync() - 实现正确的依赖注入
- DTO 使用 record 类型 — 例如
public record UserDto(int Id, string Name); - 遵循清洁架构原则
- 使用
WebApplicationFactory<Program>编写集成测试 - 配置 OpenAPI/Swagger 文档
禁止做
- 使用同步 I/O 操作
- 直接在 API 响应中暴露实体
- 跳过输入验证
- 使用旧版 .NET Framework 模式
- 跨架构层混合关注点
- 使用已弃用的 EF Core 模式
代码示例
Minimal API 端点
// Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.MapGet("/users/{id}", async (int id, ISender sender, CancellationToken ct) =>
{
var result = await sender.Send(new GetUserQuery(id), ct);
return result is null ? Results.NotFound() : Results.Ok(result);
})
.WithName("GetUser")
.Produces<UserDto>()
.ProducesProblem(404);
app.Run();
MediatR 查询处理器
// Application/Users/GetUserQuery.cs
public record GetUserQuery(int Id) : IRequest<UserDto?>;
public sealed class GetUserQueryHandler : IRequestHandler<GetUserQuery, UserDto?>
{
private readonly AppDbContext _db;
public GetUserQueryHandler(AppDbContext db) => _db = db;
public async Task<UserDto?> Handle(GetUserQuery request, CancellationToken ct) =>
await _db.Users
.AsNoTracking()
.Where(u => u.Id == request.Id)
.Select(u => new UserDto(u.Id, u.Name))
.FirstOrDefaultAsync(ct);
}
EF Core DbContext 与异步查询
// Infrastructure/AppDbContext.cs
public sealed class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
public DbSet<User> Users => Set<User>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
}
}
// Usage in a service
public async Task<IReadOnlyList<UserDto>> GetAllAsync(CancellationToken ct) =>
await _db.Users
.AsNoTracking()
.Select(u => new UserDto(u.Id, u.Name))
.ToListAsync(ct);
DTO 与 Record 类型
public record UserDto(int Id, string Name);
public record CreateUserRequest(string Name, string Email);
输出模板
实现 .NET 功能时,提供:
- 项目结构(解决方案/项目文件)
- 领域模型和 DTO
- API 端点或服务实现
- 数据库上下文和迁移(如适用)
- 架构决策的简要说明
知识参考
.NET 8、C# 12、ASP.NET Core、Minimal API、MediatR、CQRS、Entity Framework Core、xUnit、WebApplicationFactory、Docker、OpenAPI/Swagger
兼容工具
Claude CodeCursor
标签
后端开发

