Exploring the model-binding logic of minimal APIs: Behind the scenes of...
This is the third post in the series: Behind the scenes of minimal APIs. Part 1 - A first look behind the scenes of minimal API endpoints Part 2 - Extracting metadata from a minimal API handler Part 3...
View ArticleGenerating argument expressions for minimal APIs: Behind the scenes of...
This is the fourth post in the series: Behind the scenes of minimal APIs. Part 1 - A first look behind the scenes of minimal API endpoints Part 2 - Extracting metadata from a minimal API handler Part...
View ArticleGenerating argument expressions for minimal APIs (continued): Behind the...
In the previous post in this series, I showed how RequestDelegateFactory.CreateArgument() generates Expression trees for minimal API handlers. In this post I continue where we left off and look at...
View ArticleGenerating the response writing expression for RequestDelegate: Behind the...
In the previous two posts, I looked in detail at how the RequestDelegateFactory.CreateArgument() method creates the Expression used to bind different types of parameters in your endpoint handler. The...
View ArticleThoughts on 'What is .NET, and why should you choose it?'
Microsoft have just posted the first of what will be a series of posts on the design tenants and goals of .NET. This first post acts as an introduction, but it's also very detailed, and moderately...
View ArticleBuilding the final RequestDelegate: Behind the scenes of minimal APIs - Part 7
Throughout this series, we've been looking at the various pieces that go into turning a minimal API endpoint handler into a RequestDelegate that ASP.NET Core can invoke. We looked at the various...
View ArticleCustomising the RequestDelegate with filters: Behind the scenes of minimal...
Throughout this series we've looked at the code generation for simple minimal API endpoints. As part of this process, I've been ignoring the "filters" feature added in .NET 7, as it adds a certain...
View ArticleDrawing graphs in GitHub comments with Mermaid diagrams
In this post I show how I managed to draw graphs in GitHub PR comments using Mermaid diagrams! Background: why draw graphs in GitHub comments? In our work on the Datadog .NET tracer, we have to be...
View ArticleWorking with Git in JetBrains Rider
In this post I describe one of the features I really like about the JetBrains' Rider IDE: its built-in Git support. I'm a bit fan of command-line Git for many things, but the Git integration in Rider...
View ArticleUnderstanding the .NET ecosystem: The evolution of .NET into .NET 7
I've been working hard on the latest edition of my book, ASP.NET Core in Action, Third Edition, working through the final review process. There's a lot of new content in this edition, so we chose to...
View ArticleUnderstanding the .NET ecosystem: The introduction of .NET Standard
This post is the second of a two part series on understanding the .NET ecosystem. I've been working hard on the latest edition of my book, ASP.NET Core in Action, Third Edition, and there's a lot of...
View ArticleAdding client-side validation to ASP.NET Core, without jQuery or unobtrusive...
ASP.NET Core is heavily influenced by the legacy .NET Framework System.Web-based ASP.NET Framework, but it's fundamentally faster and more modern. Nevertheless, one feature made it's way essentially...
View ArticleSmoother rebases with auto-squashing Git commits
At work the other day, a colleague mentioned they'd found my post on Git's --update-refs option for working with stacked branches, and wondered if it worked with the --autosquash option. Well,...
View ArticleSuper-charging 'git rebase' with 'git absorb'
In this post I look at the git-absorb tool for automatically creating fixup! commits. This is a follow on to my previous post on using --autosquash, in response to a comment mentioning it. I wasn't...
View ArticleMigrating comments from Disqus to giscus
In this post I describe a .NET script/tool I created to migrate the comments on my blog posts from my legacy Disqus account to GitHub discussions. In this first post I discuss the process of parsing...
View ArticleUsing Octokit.GraphQL to interact with the GitHub discussions API
In my previous post, I described the overall process of migrating comments from Disqus to giscus using a small .NET program. I described how I exported the comments to XML, cleaned the data, and...
View ArticleMaking authenticated cross-origin requests with ASP.NET Core Identity
In this post I tackle a cross-origin scenario a colleague was struggling with recently. They had logged into an ASP.NET Core app that uses ASP.NET Core Identity, and they were trying to allow...
View ArticleAdding validation to strongly typed configuration objects using FluentValidation
In my previous post I described how you could use DataAnnotation attributes and the new ValidateOnStart() method to validate your strongly-typed configuration on app startup. In this post, I show how...
View ArticleFighting with nullable reference types in Razor Pages
In this post I discuss C#'s nullable reference types in the context of Razor Pages: why the two don't play nicely together, why they probably never will, and how to make the experience a bit nicer....
View ArticleWorking with stacked branches in Git is easier with --update-refs
In this post I discuss how to use a new Git rebasing feature, --update-refs, which was included in Git 2.38, in October 2022. This makes working with "stacked" branches a lot easier. Stacked what now?...
View Article