13 Practical Tips for ASP.NET Core HTTP Logging

TL;DR - Practical Tips for ASP.NET Core HTTP Logging Middleware Use EnableBuffering() to safely log request bodies and reset stream position after reading. Capture response bodies by swapping HttpResponse.Body with a MemoryStream and restoring after logging. Always filter or redact sensitive data before logging HTTP bodies. Set size limits and skip large or binary payloads to avoid performance issues. Filter logs by endpoint, HTTP method, or custom attributes for clarity. Built-in HttpLogging is simple; custom middleware offers full control and advanced filtering. Use structured logging and external services for production monitoring. Wrap middleware in extension methods for clean, configurable registration. Leverage PipeReader and System.IO.Pipelines for more efficient memory usage. Use Span<T> and ArrayPool<T> for zero-allocation processing of large payloads. Consider implementing request sampling in production to reduce log volume. Use a complete middleware implementation that combines all best practices. 1. How does EnableBuffering help you log request bodies in ASP.NET Core? EnableBuffering allows you to read request bodies multiple times without breaking the pipeline. ...

July 2, 2025 · Last modified: September 20, 2025 · 15 min

Angular @defer: Cut Initial Load Time by 97% [Real Benchmarks & Code]

TL;DR: Angular’s @defer directive delays non-critical UI rendering, cutting initial load time by up to 97% in real apps. Use it to lazy load heavy components, reduce Time to Interactive (TTI), and improve Core Web Vitals. Includes real benchmarks and production-ready examples. Introduction Ever loaded up an Angular app and watched that progress bar crawl while your users bail? Yeah, me too. That’s why I got so excited when the Angular team released the @defer feature. It’s a game-changer for those of us battling slow initial load times. ...

June 23, 2025 · Last modified: July 3, 2025 · 21 min

C# 14’s params for Collections: Say Goodbye to Arrays!

Ever used the params keyword in C#? If you write C# code regularly, you probably reach for it whenever you need to pass a variable number of arguments to a method. It’s super handy, letting you skip the tedious step of creating arrays first. But until now, there’s been a limitation: params only worked with arrays. This meant every call created memory allocations with potential performance costs. The good news? C# 14 is changing the game by extending params to work with modern collections like IEnumerable<T>, Span<T>, and more. ...

June 21, 2025 · Last modified: July 24, 2025 · 3 min

5 Essential Benefits of Immutability in C# Programming

TL;DR: Immutable objects can’t be changed after creation. In C#, this can make your code safer, easier to test, and bug-resistant, especially in multithreaded or async scenarios. Have you ever had a bug where some object mysteriously changed its value? Or spent hours debugging a weird race condition? Immutability might be the solution you need. In simple terms, immutable objects can’t be changed after they’re created. Instead of modifying an existing object, you create a new one with the updated values. It’s like the difference between editing a document and making a new copy with your changes. ...

June 20, 2025 · Last modified: July 24, 2025 · 8 min

C# Deadlock: 5 Proven Ways to Prevent and Debug Them

TL;DR: A deadlock happens when threads block each other, waiting for resources that never become available. Most deadlocks in C# are caused by inconsistent lock ordering or mixing sync and async code. Recognize deadlocks by symptoms like app hangs, high thread count, or timeout exceptions. Prevent deadlocks by always acquiring locks in a consistent order, minimizing lock duration, and using lock timeouts. Prefer higher-level synchronization tools like SemaphoreSlim or concurrent collections to reduce risk. In async code, avoid blocking calls like .Wait() or .Result - use await all the way. Use debugging tools and thread dumps to detect and analyze deadlocks in production. Design your multithreaded code with prevention in mind; fixing deadlocks after deployment is much harder. A deadlock is one of the hardest bugs to solve in a multithreaded C# application. It doesn’t cause a crash or an obvious exception; it just brings your application to a silent, grinding halt. If you’ve ever seen a service become completely unresponsive under load for no apparent reason, a deadlock might be the culprit. ...

June 20, 2025 · Last modified: September 16, 2025 · 8 min
×