Skip to content
ExponaBLOG
Series · Day 100 of 100

.NET & ASP.NET Core

  1. 51
    API versioning in ASP.NET Core: best practices explained
    Plan for v2 on day one — implement it only when needed.
  2. 52
    Unit testing with xUnit: real-world lessons and examples
    Tests that are fast, readable and worth keeping.
  3. 53
    Integration tests with WebApplicationFactory in practice
    Test the real HTTP pipeline in memory.
  4. 54
    Testcontainers for real databases in .NET & ASP.NET Core
    Stop mocking your database. Run the real one in Docker.
  5. 55
    Mocking with NSubstitute: a hands-on guide for engineers
    Readable test doubles with minimal ceremony.
  6. 56
    Benchmarking with BenchmarkDotNet in .NET & ASP.NET Core
    Stop guessing. Measure performance properly.
  7. 57
    Span<T> in everyday code: a hands-on guide for engineers
    Slice data without allocating new arrays or strings.
  8. 58
    Reducing allocations in hot paths in .NET & ASP.NET Core
    GC pauses are latency spikes. Allocate less.
  9. 59
    Strings: StringBuilder and interpolation for production
    String concatenation in loops still hurts.
  10. 60
    Choosing the right collection: best practices explained
    The data structure decision behind most performance wins.
  11. 61
    LINQ performance traps: a practical guide for developers
    LINQ is great until it runs a query 500 times.
  12. 62
    Real-time with SignalR: a practical guide for developers
    Live dashboards and notifications in .NET.
  13. 63
    Scaling SignalR across servers: best practices explained
    Two instances means two separate sets of connections.
  14. 64
    gRPC in .NET: concepts, trade-offs and production lessons
    Fast, typed service-to-service calls.
  15. 65
    Receiving webhooks reliably: a .NET guide for developers
    Lessons from Stripe and payment gateway integrations.
  16. 66
    File uploads and large file streaming: a practical guide
    Upload 2 GB files without exhausting memory.
  17. 67
    Pagination in EF Core: a practical guide for developers
    Offset is easy. Keyset scales.
  18. 68
    Multi-tenancy in EF Core: a hands-on guide for engineers
    Patterns from building multi-tenant SaaS in .NET.
  19. 69
    Feature flags in .NET: a practical guide for developers
    Ship code dark, release it when ready.
  20. 70
    Payment gateway integration lessons for .NET developers
    What I learned integrating Stripe, Razorpay and local gateways.
  21. 71
    Idempotency keys in ASP.NET Core: lessons from production
    Make POST requests safe to retry.
  22. 72
    The outbox pattern in .NET: patterns, pitfalls and fixes
    Stop losing events between your database and your broker.
  23. 73
    MassTransit in a nutshell: .NET best practices explained
    A message bus abstraction that saves weeks of plumbing.
  24. 74
    Kafka with .NET: concepts, trade-offs and production lessons
    Producing and consuming with the Confluent client.
  25. 75
    Dockerizing a .NET app: a practical guide for developers
    A small, secure image in a multi-stage Dockerfile.
  26. 76
    Hosting .NET on Linux behind Nginx: a step-by-step guide
    The self-hosted setup I use for many production apps.
  27. 77
    Native AOT for .NET APIs: a hands-on guide for engineers
    Millisecond startup and tiny memory for the right workloads.
  28. 78
    .NET Aspire for local development: a step-by-step guide
    Orchestrate APIs, databases and queues with C# instead of YAML.
  29. 79
    Managing secrets in .NET: a hands-on guide for engineers
    Secrets never belong in appsettings.json.
  30. 80
    Security headers and HTTPS: .NET lessons from production
    Small middleware, big protection.
  31. 81
    CORS done right: what every .NET developer should know
    CORS is a browser feature, not API security.
  32. 82
    Data protection and encryption: best practices explained
    Protect sensitive data at rest and in transit.
  33. 83
    Raw SQL in EF Core, safely: .NET lessons from production
    FromSql is safe. String concatenation is not.
  34. 84
    Source generators in C#: real-world lessons and examples
    Compile-time code generation that replaces reflection.
  35. 85
    Nullable reference types: a hands-on guide for engineers
    Let the compiler find your NullReferenceExceptions.
  36. 86
    Modern pattern matching in C#: best practices explained
    Replace nested if/else with readable expressions.
  37. 87
    Primary constructors in C# 12: best practices explained
    Less boilerplate for classes that only receive dependencies.
  38. 88
    C# features worth adopting now: best practices explained
    Small language upgrades that clean up real codebases.
  39. 89
    Extension methods done right: a .NET guide for developers
    Powerful for readability — dangerous for discoverability.
  40. 90
    Generics and constraints that pay off: a practical guide
    Write reusable code without losing type safety.
  41. 91
    My .NET pull request checklist: best practices explained
    What I check in every .NET code review as a tech lead.
  42. 92
    Refactoring a fat controller: a .NET guide for developers
    From a 900-line controller to clean, testable slices.
  43. 93
    Exception handling anti-patterns: a practical .NET guide
    Patterns I remove in almost every legacy codebase.
  44. 94
    Modular monolith in .NET: a hands-on guide for engineers
    The architecture I recommend before microservices.
  45. 95
    Architecture tests in .NET: patterns, pitfalls and fixes
    Make your architecture rules executable.
  46. 96
    Migrating from .NET Framework: best practices explained
    A pragmatic path from legacy to modern .NET.
  47. 97
    Upgrading .NET versions without drama: a practical guide
    LTS every two years, STS in between — keep moving.
  48. 98
    My production-ready .NET template: a step-by-step guide
    Everything I set up before writing the first feature.
  49. 99
    Advice for junior .NET developers: a step-by-step guide
    What I tell every junior developer I mentor.
  50. 100
    100 days of .NET: what I learned — a step-by-step guide
    Wrapping up the series — and what comes next.