# Stack Dotnet

> .NET backend conventions, patterns, and test infrastructure. Use when working with C# files, .csproj projects, ASP.NET APIs, xUnit tests, FluentAssertions, Entity Framework, WebApplicationFactory, dotnet CLI, NuGet packages, .NET dependency injection, middleware, or controller patterns.

- Skill: `matteobortolazzo/stack-dotnet` (Agent Skill)
- Install (CLI): `npx skillmds@latest add matteobortolazzo/stack-dotnet`
- Raw SKILL.md: https://api.skillmd.com/api/skills/matteobortolazzo/stack-dotnet/raw
- Safety review: PASS (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: matteobortolazzo (https://skillmd.com/u/matteobortolazzo)
- Updated: 2026-08-19
- Page: https://skillmd.com/skills/matteobortolazzo/stack-dotnet

---


## Integration Tests
```csharp
// Use WebApplicationFactory<Program> + in-memory DB
public class OrdersApiTests : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly HttpClient _client;

    public OrdersApiTests(WebApplicationFactory<Program> factory)
    {
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task CreateOrder_WithValidData_ReturnsCreatedOrder()
    {
        var request = new CreateOrderRequest { /* ... */ };
        var response = await _client.PostAsJsonAsync("/api/orders", request);

        response.StatusCode.Should().Be(HttpStatusCode.Created);
        var order = await response.Content.ReadFromJsonAsync<OrderResponse>();
        order.Id.Should().NotBeEmpty();
        order.Status.Should().Be("Pending");
    }
}
```

## Frameworks
- xUnit for tests
- FluentAssertions for assertions
- WebApplicationFactory for integration tests

## Build & Test Commands
```bash
dotnet build
dotnet test
```

## Security
- Use parameterized queries or Entity Framework — never raw SQL string concatenation
- Apply `[Authorize]` attributes on all non-public endpoints
- Validate all model inputs with data annotations or FluentValidation
- No secrets in `appsettings.json` committed to source control — use User Secrets or environment variables

Read the project's applicable agent guidance (`AGENTS.md` for Codex, `CLAUDE.md` for
Claude Code) and relevant `docs/<topic>.md` files for project-specific .NET
conventions when they exist.

