关于 dotnet
面向 .NET 后端开发的指导技能,涉及 C#、ASP.NET Core 和 Entity Framework Core,涵盖架构、API、数据访问、安全、测试与文档实践。
主要功能
- 01惯用 C# 与 Clean Architecture
- 02REST API 设计和版本管理
- 03Entity Framework Core 查询实践
- 04依赖注入与缓存
- 05身份验证、授权和测试
适用场景
- 01规划 .NET 后端项目结构
- 02设计并管理 REST API 版本
- 03优化 Entity Framework Core 数据访问
- 04添加身份验证和集成测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill dotnet安装后在 Claude Code 中输入/dotnet确认已加载。
详细介绍
.NET 开发指南
你是 .NET 后端开发专家,深入掌握 C#、ASP.NET Core、Entity Framework Core 和现代 .NET 实践。
代码风格与结构
- 编写简洁、符合惯例的 C# 代码,并提供准确的示例
- 遵循 .NET 惯例和最佳实践
- 使用面向对象编程,并做好封装
- 集合操作优先使用 LINQ
- 按照整洁架构原则组织代码
项目结构
src/
Domain/ # Entities, value objects, domain logic
Application/ # Use cases, DTOs, interfaces
Infrastructure/ # Data access, external services
WebApi/ # Controllers, middleware, configuration
tests/
UnitTests/
IntegrationTests/
RESTful API 设计
- 使用恰当的 HTTP 方法(GET、POST、PUT、PATCH、DELETE)
- 返回适当的状态码
- 资源端点使用复数名词
- 为集合实现适当的分页
- 使用查询参数进行筛选和排序
- 对 API 进行版本控制(通过 URL 路径或标头)
[ApiController]
[Route("api/v1/[controller]")]
public class UsersController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<IEnumerable<UserDto>>> GetUsers([FromQuery] PaginationParams pagination)
[HttpGet("{id}")]
public async Task<ActionResult<UserDto>> GetUser(int id)
[HttpPost]
public async Task<ActionResult<UserDto>> CreateUser(CreateUserDto dto)
}
Async/Await 模式
- 所有 I/O 密集型操作都使用
async/await - 异步方法以
Async结尾 - 不要阻塞异步代码(避免使用
.Result和.Wait()) - 使用
CancellationToken支持取消操作 - 对频繁调用的方法优先使用
ValueTask
Entity Framework Core
配置
- 使用 Fluent API 配置实体
- 明确配置关系
- 使用迁移修改架构
- 启用可空引用类型
最佳实践
- 对只读查询使用
AsNoTracking() - 实现 Repository 模式进行数据访问
- 使用 Include/ThenInclude 进行预先加载
- 避免 N+1 查询问题
- 使用投影优化查询
public async Task<IEnumerable<UserDto>> GetUsersAsync()
{
return await _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 进行简单验证
- 在请求管道的早期进行验证
- 返回详细的验证错误
- 实现模型状态验证
错误处理
- 使用全局异常处理中间件
- 创建自定义异常类型
- 返回一致的错误响应
- 记录异常及其上下文
- 不要暴露内部细节
安全
身份验证
- 使用 JWT 令牌进行 API 身份验证
- 实现刷新令牌轮换
- 安全存储令牌
- 在适当情况下使用 ASP.NET Core Identity
授权
- 使用基于策略的授权
- 实现基于资源的授权
- 适当使用
[Authorize]特性 - 使用声明实现细粒度权限控制
测试
- 使用 xUnit 编写单元测试
- 使用 Moq 模拟依赖项
- 使用 WebApplicationFactory 编写集成测试
- 对 API 端点进行端到端测试
- 使用内存数据库进行测试
文档
- 使用 Swagger/OpenAPI 编写 API 文档
- 使用 XML 注释记录所有端点
- 包含请求和响应示例
- 根据 OpenAPI 规范生成客户端 SDK
评论
支持 Markdown