← blog

commit 7ca70d4

Author: Arvind Rathee <hello@akrathee.dev>

Date: May 1, 2026

Day 1 of learning .NET as a React dev

First impressions of C#, ASP.NET Core, and EF Core from someone who's spent five years in TypeScript.

2 min read · backend · #dotnet #learning #backend

part of series: dotnet diary

I've decided to learn .NET — properly, not the "I followed a CRUD tutorial once" kind of properly — and I'm going to log it here as I go.

Day 1 was: install the SDK, scaffold a Web API, get a Hello, world endpoint up.

what felt familiar

  • Strong typing. Coming from TypeScript, C#'s type system is friendly. I've already typed interface instead of record once, but the muscle memory transfers fast.
  • Async/await. Same syntax, similar rules.
  • DI containers. I've used them in Angular and Nest; ASP.NET Core's built-in DI feels like a tighter version of those.

The first endpoint is suspiciously short:

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
 
app.MapGet("/hello", (string? name) => $"Hello, {name ?? "world"}!");
 
app.Run();

what felt foreign

  • csproj files. Coming from package.json, I miss having scripts and deps in one place.
  • The C# ecosystem's opinion about structure. Frontend is a wild west; .NET projects have a clearer "this is where things go" attitude. Refreshing, occasionally constraining.
  • Solutions vs projects. Took me ten minutes to realize a .sln is just a multi-project workspace.

the simplest endpoint, two ways

Here's the difference between scaffolded controller-style routing and a minimal API endpoint:

- Controller (verbose)
- [ApiController]
- [Route("[controller]")]
- public class HelloController : ControllerBase {
- [HttpGet]
- public string Get() => "Hello, world";
- }
+ Minimal API
+ var app = WebApplication.Create(args);
+ app.MapGet("/hello", () => "Hello, world");
+ app.Run();

The minimal API is closer to the Express / Fastify mental model I already have, so I'm starting there and graduating to controllers when the file grows past one screen.

next

Tomorrow: EF Core and a real database (SQLite to start). I want to feel migrations end-to-end before I commit to a stack for my next side project.

If you're a .NET person and have one thing you wish someone told you on day one, my inbox is open.

comments

$ git log --comments → Discussions not yet wired. Configure Giscus env vars to enable.