mcpField
D
dotnet

dotnet

github.com/mindrally开发287728 次安装3 周前更新
代码仓库

关于 dotnet

面向 .NET 后端开发的指导技能,涉及 C#、ASP.NET Core 和 Entity Framework Core,涵盖架构、API、数据访问、安全、测试与文档实践。

主要功能

  1. 01惯用 C# 与 Clean Architecture
  2. 02REST API 设计和版本管理
  3. 03Entity Framework Core 查询实践
  4. 04依赖注入与缓存
  5. 05身份验证、授权和测试

适用场景

  1. 01规划 .NET 后端项目结构
  2. 02设计并管理 REST API 版本
  3. 03优化 Entity Framework Core 数据访问
  4. 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