Skip to content
Development
Skill

/dotnet-backend-patterns

Provides .NET and ASP.NET Core patterns for REST APIs, Entity Framework, dependency injection, and middleware. Use when working with C# files (*.cs, *.csproj) or when the user mentions .NET, ASP.NET Core, C#, or Entity Framework.

From plugin
software-development-department
74116 skills28 agents1 MCP

Claude Code

$ npx -y skills add tranhieutt/software_development_department --skill dotnet-backend-patterns --agent claude-code

SKILL.md

dotnet-backend-patterns.SKILL.md
name: dotnet-backend-patterns
type: reference
description: "Provides .NET and ASP.NET Core patterns for REST APIs, Entity Framework, dependency injection, and middleware. Use when working with C# files (*.cs, *.csproj) or when the user mentions .NET, ASP.NET Core, C#, or Entity Framework."
paths: ["**/*.cs", "**/*.csproj", "**/*.sln", "**/appsettings*.json"]
effort: 3
allowed-tools: Read, Glob, Grep
user-invocable: true
when_to_use: "When building C#/.NET backend APIs, MCP servers, or enterprise applications with Entity Framework or Dapper"

.NET Backend Development Patterns

C#/.NET patterns for production-grade APIs, MCP servers, and enterprise backends.

API Structure (Minimal API + Controllers)

\`\`\`csharp // Program.cs - Minimal API var builder = WebApplication.CreateBuilder(args); builder.Services.AddDbContext<AppDbContext>(o => o.UseNpgsql(connStr)); builder.Services.AddScoped<IOrderService, OrderService>();

var app = builder.Build(); app.MapGet("/orders/{id}", async (int id, IOrderService svc) => await svc.GetByIdAsync(id) is { } order ? Results.Ok(order) : Results.NotFound()); \`\`\`

Dependency Injection Patterns

\`\`\`csharp // Register services builder.Services.AddScoped<IPaymentService, StripePaymentService>(); builder.Services.AddSingleton<ICacheService, RedisCacheService>(); builder.Services.AddHttpClient<IApiClient, ExternalApiClient>(client => { client.BaseAddress = new Uri("https://api.external.com"); }); \`\`\`

Lifetime guide: Singleton (stateless/cache), Scoped (per-request), Transient (stateless utility).

Entity Framework Core

\`\`\`csharp // DbContext with conventions public class AppDbContext : DbContext { public DbSet<Order> Orders => Set<Order>(); protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<Order>().HasIndex(o => o.UserId); builder.Entity<Order>().Property(o => o.Total).HasPrecision(18, 2); } } \`\`\`

Performance tips:

  • Use `.AsNoTracking()` for read-only queries
  • Avoid N+1 with `.Include()` or projection
  • Use compiled queries for hot paths

Middleware Pipeline

\`\`\`csharp app.UseMiddleware<RequestLoggingMiddleware>(); app.UseAuthentication(); app.UseAuthorization(); app.UseRateLimiter(); app.MapControllers(); \`\`\`

Error Handling

\`\`\`csharp // Global exception handler app.UseExceptionHandler(err => err.Run(async context => { var exception = context.Features.Get<IExceptionHandlerFeature>()?.Error; var (status, message) = exception switch { NotFoundException => (404, exception.Message), UnauthorizedAccessException => (403, "Forbidden"), _ => (500, "Internal server error") }; context.Response.StatusCode = status; await context.Response.WriteAsJsonAsync(new { error = message }); })); \`\`\`

Configuration (IOptions pattern)

\`\`\`csharp builder.Services.Configure<StripeSettings>( builder.Configuration.GetSection("Stripe"));

// Usage public class PaymentService(IOptions<StripeSettings> opts) { private readonly string _key = opts.Value.SecretKey; } \`\`\`

Testing

\`\`\`csharp // Integration test with WebApplicationFactory public class OrderApiTests : IClassFixture<WebApplicationFactory<Program>> { private readonly HttpClient _client; [Fact] public async Task GetOrder_ReturnsOk() { var response = await _client.GetAsync("/orders/1"); response.StatusCode.Should().Be(HttpStatusCode.OK); } } \`\`\`

Related Skills

  • `backend-architect` — architecture decisions
  • `database-architect` — schema design
  • `drizzle-orm-expert` — Node.js ORM alternative
Read more
@tranhieutt
Ships withsoftware-development-department

Software Development Department

74116 skills28 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
74
Star history of tranhieutt/software_development_department on GitHub, a chart by star-history.com

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills13d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react4d252k
@facebook@facebookInstall Skill

Questions about dotnet-backend-patterns.

Which coding agents can use dotnet-backend-patterns?
dotnet-backend-patterns installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.