后端与接口
在开发 .NET 后端(C#、ASP.NET Core…
适用于使用 C#、ASP.NET Core 和 Entity Framework Core 开发 .NET 后端服务时的全流程编码与架构规范。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在开发 .NET 后端(C#、ASP.N特定
解决思路
- 代码风格与结构:编写简洁、符合 C# 习惯的代码,并提供准确示例。
- 代码风格与结构:遵循 .NET 约定和最佳实践。
- 代码风格与结构:使用面向对象编程,并做好封装。
- 代码风格与结构:集合操作优先使用 LINQ。
- 代码风格与结构:按 Clean Architecture 原则组织代码。
- 项目结构:按以下结构组织项目:`src/Domain/` 存放实体、值对象、领域逻辑;`src/Application/` 存放用例、DTO、接口;`src/Infrastructure/` 存放数据访问、外部服务;`src/WebApi/` 存放控制器、中间件、配置;`tests/UnitTests/` 存放单元测试;`tests/IntegrationTests/` 存放集成测试。
- RESTful API 设计:使用正确的 HTTP 方法(GET、POST、PUT、PATCH、DELETE)。
- RESTful API 设计:返回合适的 HTTP 状态码。
- RESTful API 设计:资源端点使用复数名词。
- RESTful API 设计:为集合实现正确的分页。
- RESTful API 设计:使用查询参数进行过滤和排序。
- RESTful API 设计:对 API 进行版本控制(URL 路径或请求头)。
- RESTful API 设计示例:在控制器类上使用 `[ApiController]` 和 `[Route("api/v1/[controller]")]`;使用 `[HttpGet]` 获取用户列表并接收 `[FromQuery] PaginationParams pagination`;使用 `[HttpGet("{id}")]` 获取单个用户;使用 `[HttpPost]` 创建用户;操作返回 `async Task<ActionResult<...>>`。
- Async/Await 模式:所有 I/O 密集型操作使用 `async/await`。
- Async/Await 模式:异步方法名以 `Async` 结尾。
- Async/Await 模式:不要阻塞异步代码(避免 `.Result` 和 `.Wait()`)。
- Async/Await 模式:使用 `CancellationToken` 支持取消。
- Async/Await 模式:频繁调用的方法优先使用 `ValueTask`。
- Entity Framework Core 配置:使用 Fluent API 配置实体。
- Entity Framework Core 配置:显式配置关系。
- Entity Framework Core 配置:使用迁移处理 schema 变更。
- Entity Framework Core 配置:启用可空引用类型。
- Entity Framework Core 最佳实践:只读查询使用 `AsNoTracking()`。
- Entity Framework Core 最佳实践:为数据访问实现 Repository 模式。
- Entity Framework Core 最佳实践:使用 `Include/ThenInclude` 进行预加载。
- Entity Framework Core 最佳实践:避免 N+1 查询问题。
- Entity Framework Core 最佳实践:使用投影优化查询。
- Entity Framework Core 查询示例:在异步方法中返回 `_context.Users.AsNoTracking().Select(u => new UserDto { Id = u.Id, Name = u.Name }).ToListAsync()`。
- 依赖注入:使用构造函数注入。
- 依赖注入:在 `Program.cs` 中注册服务。
- 依赖注入:使用合适的生命周期(Scoped、Transient、Singleton)。
- 依赖注入:为服务抽象创建接口。
- 依赖注入:使用 Options 模式处理配置。
- 依赖注入示例:使用 `builder.Services.AddScoped<IUserService, UserService>();` 和 `builder.Services.Configure<JwtSettings>(builder.Configuration.GetSection("Jwt"));`。
- 缓存:使用 `IMemoryCache` 做内存缓存。
- 缓存:分布式场景使用 `IDistributedCache`。
- 缓存:实现缓存失效策略。
- 缓存:对 HTTP 响应使用响应缓存。
- 缓存:生产环境考虑使用 Redis。
- 验证:复杂验证使用 FluentValidation。
- 验证:简单验证使用 Data Annotations。
- 验证:在请求管道中尽早验证。
- 验证:返回详细的验证错误。
- 验证:实现模型状态验证。
- 错误处理:使用全局异常处理中间件。
- 错误处理:创建自定义异常类型。
- 错误处理:返回一致的错误响应。
- 错误处理:带上下文记录异常。
- 错误处理:不要暴露内部细节。
- 安全-认证:API 认证使用 JWT 令牌。
- 安全-认证:实现刷新令牌轮换。
- 安全-认证:安全存储令牌。
- 安全-认证:合适时使用 ASP.NET Core Identity。
- 安全-授权:使用基于策略的授权。
- 安全-授权:实现基于资源的授权。
- 安全-授权:恰当地应用 `[Authorize]` 特性。
- 安全-授权:使用 claims 实现细粒度权限。
- 测试:使用 xUnit 编写单元测试。
- 测试:使用 Moq mock 依赖。
- 测试:使用 WebApplicationFactory 编写集成测试。
- 测试:端到端测试 API 端点。
- 测试:使用内存数据库进行测试。
- 文档:使用 Swagger/OpenAPI 编写 API 文档。
- 文档:用 XML 注释记录所有端点。
- 文档:包含请求/响应示例。
- 文档:从 OpenAPI 规范生成客户端 SDK。
适用边界 · 注意事项
- 不适用于非 .NET 技术栈(如 Node.js、Java、Python)的后端开发。
- 不适用于不使用 ASP.NET Core 或 Entity Framework Core 的 .NET 项目。
- 不适用于一次性脚本、原型或不需要分层架构和 API 规范的小型项目。