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
318 posts
Automate JavaScript scanning with Retire.js in Azure DevOps

Every web developer uses a lot of JavaScript libraries. When installing packages from npm, it almost feels like you are downloading half of the libraries there. Like every other piece of code, JavaScript can include vulnerabilities that make hackers drool and eager to start exploiting your site. In this post, ...

How to run code coverage of .NET code on Azure DevOps

I have a love/hate relationship with measuring code coverage on unit tests. When done right, it can be a powerful and helpful tool. I've experienced successful implementations and disasters (more about that in the last part). In this post, I'll show how you can perform ...

Common HttpClient tasks you're googling or asking ChatGPT

Using HttpClient has become my default choice when making HTTP requests from .NET. While there are many good alternatives out there (like Refit, Flurl, and RestSharp), having a built-in client that does most tasks in a pretty easy and straightforward way, makes this an obvious choice for many. While the ...

Adding Cloudflare Turnstile to an ASP.NET Core website

We have been using Captchas for several years on elmah.io. Not to annoy users (they ARE annoying, I know) but to avoid bots trying to automate password reset requests and similar. We have been using reCAPTCHA from Google but after they announced moving this feature to Google Cloud, we ...

The NuGet packages we use to build elmah.io revisited

Four years ago, I wrote the blog post The NuGet packages we use to build elmah.io. Since then, we have made several changes to our tech stack as well as upgraded to recent versions of .NET. For this post, I'll update you on the packages we use ...

Revisiting improved HTTP logging in ASP.NET Core 8

A few years ago, I had a play with HTTP logging added in ASP.NET Core 6. ASP.NET Core 8 introduced a set of additional configuration options that I believe are essential to make this feature usable. I will recap the details from the previous post below, but for ...

Understanding .NET stack traces - A guide for developers

Stack traces are important for debugging and understanding exceptions in .NET applications. They provide detailed information about the error and the call stack when an exception occurs, allowing us as developers to investigate why an error happened. In this post, I'll walk you through the basics of reading ...

Lessons learned after migrating Azure Functions to Isolated Functions on .NET 8

The In-process model of running Azure Functions is being retired in favor of the Isolated model in two years. A lot of components on elmah.io are running on Azure Functions. To ensure we are running on the most modern and supported platform (also in two years), we have spent ...

"Secret" elmah.io features #5 - Breadcrumbs leading up to errors

It's time for a new post in the series about "secret" elmah.io features. This is the series where I highlight features that some of you may already know while others don't. For today's post, I want to highlight a feature that ...