Skip to content

Web & Backend

.NET and ASP.NET Core

.NET is a free, open-source, cross-platform runtime and standard library, mostly written against in C#, compiled and executed by the CLR (Common Language Runtime) with just-in-time or ahead-of-time compilation. ASP.NET Core is the web framework layer built on top of it, used to build HTTP APIs, server-rendered web apps, and real-time services. What's now just called ".NET" started as the Windows-only .NET Framework, was rebuilt cross-platform as .NET Core in 2016, and had "Core" dropped from its name at .NET 5 in 2020 to signal it as the one .NET going forward — the old .NET Framework still exists but is in maintenance mode, receiving only security fixes.

Why it matters

It's the default backend stack in a lot of large, Microsoft-centric enterprises
Organizations already running Windows Server, Active Directory, SQL Server, or Azure often standardize backend services on C# and ASP.NET Core because it integrates natively with the rest of that stack, from auth to deployment tooling.
It's a genuinely fast, compiled runtime, not just a marketing claim
The CLR JIT-compiles C# to native code (with an ahead-of-time option available too), and ASP.NET Core's Kestrel server is built for throughput, which gives it a performance profile closer to compiled languages than to a dynamically-typed runtime.
One SDK covers web, desktop, mobile, and cloud functions
The same .NET SDK builds an ASP.NET Core API, a MAUI desktop or mobile app, and an Azure Function, which matters to teams that want one language and one toolchain across very different app types.
It's a distinct hiring and career track from Node or Java
Many job listings separate ".NET/C# developer" roles from "Node.js developer" or "Java developer" roles outright — the ecosystems, typical employers, and even salary bands often differ.

What ".NET" actually refers to today

".NET" is the current, unified name for what used to be split across the Windows-only .NET Framework and the cross-platform .NET Core. Since .NET 5 (2020), there is one .NET, released roughly every November, free and open source under the .NET Foundation, running on Windows, Linux, and macOS. The legacy .NET Framework (last major version 4.8) still exists and still runs plenty of production software, but it is not getting new features — it receives only security and reliability patches, which makes it a genuinely different product on a different life cycle from ".NET" despite the overlapping name.

A minimal ASP.NET Core API

ASP.NET Core's minimal API style lets you define an HTTP endpoint in a few lines, with dependencies resolved by the framework's built-in dependency injection container — no separate DI library required, unlike a typical Express or Flask app.

C#
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IOrderRepository, OrderRepository>();
var app = builder.Build();

app.MapGet("/orders/{id}", async (int id, IOrderRepository repo) =>
{
    var order = await repo.FindAsync(id);
    return order is null ? Results.NotFound() : Results.Ok(order);
});

app.Run();

Middleware, DI, and configuration are first-party, not assembled

ASP.NET Core's request pipeline is a middleware chain, conceptually similar to Express's — each piece can inspect, short-circuit, or pass along a request. The difference is how much comes built in: dependency injection, structured configuration (layered from appsettings.json, environment variables, and secrets), and logging are all part of the framework itself, not separate packages a team has to choose and wire together.

Choosing an app model: Minimal APIs, MVC, Razor Pages, or Blazor

Minimal APIs (added in .NET 6) suit small services and microservices where a full MVC project's folder conventions are overhead. Controller-based MVC gives more structure and is often easier to keep organized and testable as an API grows. Razor Pages targets page-focused server-rendered apps. Blazor lets you write interactive UI in C# instead of JavaScript, either rendered on the server over a persistent SignalR connection (low payload, needs a live connection) or compiled to WebAssembly and run entirely in the browser (larger initial download, works offline). Picking among these is a real architectural decision, not a stylistic one.

Mistakes people make here

Treating ".NET Framework" and ".NET" as the same product with different version numbers
They share a name and a lot of history, but they're on separate life cycles: .NET Framework 4.8 is frozen at security-patch-only maintenance, while ".NET" (what used to be called .NET Core) is where every new language and runtime feature actually lands.
Blocking on async code with .Result or .Wait() inside a request handler
Classic ASP.NET (System.Web, running on .NET Framework) had a SynchronizationContext that made blocking on a Task inside a request handler a genuine deadlock risk. ASP.NET Core deliberately removed that SynchronizationContext, so the classic deadlock mostly doesn't happen — but .Result/.Wait() still ties up a thread-pool thread for the entire wait, and under real traffic that starves the thread pool and slows or times out every other request instead. Either way, the fix is the same: await the Task instead of blocking on it.
Assuming ASP.NET Core needs IIS or Windows to run
Kestrel, the built-in web server, is cross-platform and can serve traffic directly. IIS, Nginx, or Apache are optional reverse proxies used for things like TLS termination or serving multiple apps on one box, not a hard requirement to run the framework at all.
Defaulting to full MVC controllers for a tiny internal service, or to minimal APIs for a large one
Minimal APIs skip a lot of the folder and class structure MVC provides, which is fine for a small service but becomes hard to navigate at scale; the reverse — heavyweight controller scaffolding for a three-endpoint internal tool — is needless overhead in the other direction.

Strengths and trade-offs

Where it is strong

  • A statically-typed, compiled language (C#) with modern features — records, pattern matching, nullable reference types — catches a real class of bugs before the code ever runs.
  • Genuinely cross-platform and open source since .NET Core, with first-class support for running in Linux containers, not just Windows Server.
  • Dependency injection, structured configuration, and logging are built into the framework itself, instead of separate packages a team has to pick and wire up.
  • A compiled runtime and a server (Kestrel) built for throughput give it strong, consistent performance among mainstream web-framework choices.

The trade-offs

  • Smaller open-source web mindshare than Node/JavaScript — fewer community packages and tutorials for niche needs, and a hiring pool that skews toward enterprise and Windows-adjacent shops.
  • Its Windows-only reputation lingers in developer perception even though it's been genuinely cross-platform since .NET Core in 2016.
  • The full Visual Studio IDE experience is still strongest on Windows, even though VS Code plus the .NET CLI works fully on Linux and macOS.
  • More upfront structure — DI registration, strongly-typed configuration classes — than a five-line Express app, which is friction for a tiny throwaway service.

Who needs this

Directly relevant to anyone building or maintaining backend services in a Microsoft-centric organization (Azure, SQL Server, Windows Server), or evaluating .NET as an alternative backend stack to Node or Java; not required knowledge for a frontend-only developer or a team already committed to a different backend.

Questions about .net and asp.net core

Is ".NET Core" still a separate thing from ".NET"?
No — "Core" was dropped from the name starting with .NET 5 in 2020 specifically to signal there's now one .NET going forward. ".NET Core 3.1" and ".NET 5" and later are the same lineage; the legacy, Windows-only ".NET Framework" is the separate, older product still around on its own maintenance track.
Does ASP.NET Core only run on Windows?
No. It's been cross-platform since .NET Core in 2016 and runs natively on Windows, Linux, and macOS, commonly deployed today inside Linux containers.
Do I need to know C# to use ASP.NET Core?
In practice, yes — C# is by far the dominant language for ASP.NET Core. F# can also target it, but the framework's own docs, tutorials, and most production codebases are C#.
Is ASP.NET Core free to use?
Yes. The .NET SDK, runtime, and ASP.NET Core are free and open source under the .NET Foundation with no licensing fee. Visual Studio has a free Community edition and VS Code is free; only the larger Visual Studio editions carry a cost, and they're optional — the CLI and VS Code cover the same development workflow.

The primary source

Related concepts

← All concept guides