The Big Decimal Bugfix with .NET 11
For more than two decades, (decimal)1.23 returned 1.23m. It looked correct, it passed every test and it was a polite lie.
Read Blog PostFor more than two decades, (decimal)1.23 returned 1.23m. It looked correct, it passed every test and it was a polite lie.
Read Blog PostDistroless, Chiseled and Alpine are often compared as three equivalent Linux distributions. They are not. Alpine is a distribution built around musl, BusyBox and apk. Distroless describes a runtime image without a …
Read Blog PostIn the week of October 21, 2026, government portals in the Netherlands, Finland and Germany, hospital websites and several large companies took their public sites offline. Not because they had been breached, but because …
Read Blog PostMost .NET Dockerfiles repeat the same five steps: restore, publish, select the matching Microsoft runtime image, copy the output and start the application. That works, but it rarely expresses application-specific intent. …
Read Blog Postbuilder.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, …
Read Blog PostRetries 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 …
Read Blog PostASP.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 …
Read Blog PostMicrosoft Agent Framework is the successor to the agent capabilities in Semantic Kernel and AutoGen. That statement is easy to misread as “replace the package and rename a few classes.” The migration is more …
Read Blog PostAn 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 …
Read Blog PostTelemetry, 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 …
Read Blog PostTemporary data is easy to create and surprisingly difficult to remove reliably. Sessions, idempotency keys, import buffers, transient integration responses, processed-message markers and short-lived audit records all …
Read Blog PostApplications 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 …
Read Blog PostThe 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 …
Read Blog PostTime 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 …
Read Blog PostAzure Static Web Apps is primarily a host for static frontend assets, but it can also deploy a small HTTP API alongside the frontend. That API is implemented as an Azure Functions application and is exposed through the …
Read Blog PostError 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 …
Read Blog Post.NET 11 adds a small but useful improvement to the built-in observability story: MemoryCache can now publish OpenTelemetry-compatible metrics directly through System.Diagnostics.Metrics. That makes cache behavior visible …
Read Blog PostHono is often associated with Cloudflare Workers and for good reason. Its small routing model, Web Standard API surface and direct fetch integration make it a natural fit for edge runtimes. That association can obscure a …
Read Blog PostAzure Cosmos DB has a habit of exposing architectural weaknesses very early. Classic data-access patterns that work perfectly fine with relational databases often become expensive, noisy and operationally awkward once …
Read Blog PostMany long-lived .NET repositories did not start with semantic versioning. They grew up with major.minor.build.revision, often set in AssemblyInfo.cs, sometimes mixed with wildcard auto increment, sometimes duplicated …
Read Blog Post