dotnet-core-expert by jeffallan/claude-skills
npx skills add https://github.com/jeffallan/claude-skills --skill dotnet-core-expertdotnet build 以验证编译 — 如果构建失败,请检查错误、修复问题,并在继续之前重新构建dotnet test 以确认所有测试通过 — 如果测试失败,请诊断失败原因、修复实现,并在继续之前重新运行;使用 curl 或 REST 客户端验证端点根据上下文加载详细指导:
| 主题 | 参考 | 加载时机 |
|---|---|---|
| Minimal APIs | references/minimal-apis.md |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 创建端点、路由、中间件时 |
| Clean Architecture | references/clean-architecture.md | CQRS、MediatR、分层、DI 模式时 |
| Entity Framework | references/entity-framework.md | DbContext、迁移、关系时 |
| Authentication | references/authentication.md | JWT、Identity、授权策略时 |
| Cloud-Native | references/cloud-native.md | Docker、健康检查、配置时 |
.csproj 中添加 <Nullable>enable</Nullable>await dbContext.Users.ToListAsync()public record UserDto(int Id, string Name);WebApplicationFactory<Program> 编写集成测试// 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();
// 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);
}
// 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);
}
}
// 在服务中的用法
public async Task<IReadOnlyList<UserDto>> GetAllAsync(CancellationToken ct) =>
await _db.Users
.AsNoTracking()
.Select(u => new UserDto(u.Id, u.Name))
.ToListAsync(ct);
public record UserDto(int Id, string Name);
public record CreateUserRequest(string Name, string Email);
实现 .NET 功能时,请提供:
每周安装量
1.1K
代码仓库
GitHub 星标
7.2K
首次出现
Jan 21, 2026
安全审计
安装于
opencode936
gemini-cli894
codex878
github-copilot852
cursor757
claude-code749
dotnet build to verify compilation — if build fails, review errors, fix issues, and rebuild before proceedingdotnet test to confirm all tests pass — if tests fail, diagnose failures, fix the implementation, and re-run before continuing; verify endpoints with curl or a REST clientLoad detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Minimal APIs | references/minimal-apis.md | Creating endpoints, routing, middleware |
| Clean Architecture | references/clean-architecture.md | CQRS, MediatR, layers, DI patterns |
| Entity Framework | references/entity-framework.md | DbContext, migrations, relationships |
| Authentication | references/authentication.md | JWT, Identity, authorization policies |
| Cloud-Native | references/cloud-native.md | Docker, health checks, configuration |
<Nullable>enable</Nullable> in the .csprojawait dbContext.Users.ToListAsync()public record UserDto(int Id, string Name);WebApplicationFactory<Program>// 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();
// 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);
}
// 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);
public record UserDto(int Id, string Name);
public record CreateUserRequest(string Name, string Email);
When implementing .NET features, provide:
Weekly Installs
1.1K
Repository
GitHub Stars
7.2K
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode936
gemini-cli894
codex878
github-copilot852
cursor757
claude-code749
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
102,200 周安装