builder.Services.AddProblemDetails() registers infrastructure. It does not create an error contract.
An ASP.NET Core request can fail during binding, validation, authentication, authorization, endpoint execution, …
Retries are the most visible resilience strategy and the easiest one to misuse. Repeating a failing call can recover from a short network problem. It can also multiply load, repeat a write and keep working long after the …
ASP.NET Core 11 has no single feature that fundamentally changes how web applications are built. That is not a criticism. Mature frameworks improve by removing custom infrastructure, tightening defaults and making common …
An MCP server can look deceptively small. A package is installed, a method receives an attribute and ASP.NET Core maps an endpoint. That is enough for a demonstration. It is not enough for a server that is allowed to …
Telemetry, logging and auditing are often implemented through the same API because all three produce timestamped records. That similarity is superficial. They answer different questions, tolerate different failure modes …
Applications that do not use ASP.NET Core Identity still need a disciplined password-storage design. This often leads to a requirement phrased as “password encryption.” That phrase is dangerous because encryption is …
Legacy ASP.NET applications often carry years of accumulated dependencies, custom infrastructure and undocumented assumptions. This assessment provides a structured, evidence-based view of an existing application’s …
The 2.0 release of the official Model Context Protocol (MCP) C# SDK is more than a version increment. It implements the 2026-07-28 MCP specification revision, which changes the default shape of MCP over HTTP. The …
Time is an external dependency. That may sound unusual at first because DateTime.UtcNow is available anywhere without configuration. This convenience becomes a problem as soon as business rules depend on the current …
Error responses are part of an API contract. Still, many systems grow them incidentally: one endpoint returns { "error": "not found" }, another returns an array of validation errors, a gateway adds its own structure and …