Thomas Ardal

Thomas Ardal

Meet Thomas, the founder and developer behind elmah.io. Thomas blogs about everything technical from C# and ASP.NET Core to machine learning.

Denmark
308 posts
Setting up better logging in Azure Functions

We have been using Azure Functions for years. Being able to easily deploy and run code on both Azure App Services and real serverless has been a killer feature for all of our asynchronous jobs and services. Unfortunately, the logging approach provided as part of the default template is not ...

Conditionally add middleware in ASP.NET Core

Some weeks ago I wrote a blog post named How to modify response headers in ASP.NET Core middleware that explained how to set a custom response header in ASP.NET Core middleware. Since writing the post I had MULTIPLE people (okay, it was two people) write and ask how ...

How to force reload cached JSON Schemas in Visual Studio

I recently made some changes to the appsettings.json schema available on schemastore.org. I struggled a bit getting Visual Studio to pick up the recent changes, so here's a very short blog post for anyone with the same problem. For anyone not familiar with Schema Store, it& ...

How to modify response headers in ASP.NET Core middleware

I had a problem setting response headers in ASP.NET Core that I wanted to share some findings on. This might be clear to a lot of you but hopefully, this will help someone in the same situation as me. Here goes! In a small internal API, I wanted to ...

Creating custom debug visualizers for Visual Studio 2022

Developing extensions for Visual Studio has been somewhat hard previously, but it seems like the VS team is really trying to improve and simplify things. I've recently experimented with creating a custom debug visualizer for showing exceptions and in this post, I'll share some of the ...

9 "hidden" features in Visual Studio that you may not know

Visual Studio is probably the tool I use most throughout my week. It's such a versatile tool with lots of features. The downside of the extent of buttons and options is that it offers some features that you didn't even know about it. I constantly discover ...

Parsing websites in C# with Html Agility Pack or AngleSharp

While developing the "new" canonical check feature for elmah.io Uptime Monitoring, I had to parse a website from C# and inspect the DOM. I have been using Html Agility Pack in the past so this was an obvious choice. I also looked at what happened in the ...

Building and deploying AWS email templates with Azure DevOps

This is the third and final post (for now) in the series about developing email templates with MJML and deploying them to AWS. In the previous post, we developed a Gulp script to automatically build HTML from the MJML file and insert it in a template file for AWS. In ...

Building MJML email templates with Gulp

This is the second post in the series about building email templates with MJML and deploying them on AWS. In the previous post, we learned about MJML and Handlebars.js for creating cross-browser email templates with dynamic content. In this post, I will show you how you can script the ...