ASP.NET Core – Logging requests and responses

The simplest way to log requests/responses is to use the HTTP Logging middleware (added in v6). This is configurable, so you can make it suit your needs. If you need more control, you can add your own middleware instead. To use the HTTP Logging middleware, call UseHttpLogging() in your initialization code: Then add Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware to … Read more

ASP.NET Core – How to get request headers

There are two ways to get request headers: Use the Request.Headers dictionary. Use [FromHeader]. When a request comes in, the framework loads request headers into the Request.Headers dictionary. You can use this just like any other dictionary. Here’s an example of using TryGetValue() to check if a request header exists and get its value: Note: … Read more

ASP.NET Core – How to unit test a model validation attribute

You can directly unit test a model validation attribute by creating an instance of the attribute class, and then testing the two primary methods: IsValid() and FormatErrorMessage(). Here’s an example of unit testing a custom validation attribute: You can also test the built-in validation attributes (such as [Range], [RegularExpression], etc..), which is useful when you … Read more

ASP.NET Core – Create a custom model validation attribute

There are many built-in model validation attributes available – such as [Required] and [Range] – which you can use to handle most validation scenarios. When these aren’t sufficient, you can create a custom validation attribute with your own validation logic. I’ll show an example of how to do that. 1 – Subclass ValidationAttribute and implement … Read more

ASP.NET Core – API model validation attributes

It’s always a good idea to validate data coming into your web API. There are two steps you can do to guard against invalid data: Declare your model properties with the proper types. (ex: string, DateTime, int). Use model validation attributes. The main built-in ones are [Required], [Range], [StringLength], and [RegularExpression]. Here’s an example of … Read more

ASP.NET Core – Return a redirect response

A redirect response contains a redirect status code (3xx) and a redirect URL in the Location header. The redirect URL can be an absolute or relative path. It’s up to the client to follow the redirect properly. Here’s an example of returning a redirect response using the Redirect() helper method: Note: The redirect helper methods … Read more

Visual Studio project templates without minimal API and top-level statement

Devs want the option to create new projects in Visual Studio without all of the minimalist stuff that was recently added (top-level statement, minimal API). At the very least, these features should be optional instead of being the default without a way to opt-out (to be fair, minimal API is optional). What I typically do … Read more

A fatal error occurred. The required library hostfxr.dll could not be found

Problem You are trying to run a .NET executable and you get the following error: A fatal error occurred. The required library hostfxr.dll could not be found.If this is a self-contained application, that library should exist in [C:\MyApp].If this is a framework-dependent application, install the runtime in the global location [C:\Program Files\dotnet] or use the … Read more