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 – The request matched multiple endpoints

Problem When you send a request to an endpoint, you get the following error response: Note: If you’re using Swagger, you may see this in the UI as a generic error: “Failed to load API definition … response status is 500.” If you look in the ASP.NET Core Web Server output in Visual Studio, you … 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

ASP.NET Core – How to receive a file in a web API request

When the client posts a file in a multipart/form-data request, it’s loaded into an IFormFile object. This contains file information (such as the file name) and exposes the file content as a stream. This allows you to save the file or process it however you want to. You can access the IFormFile object through Request.Form.Files: … Read more

ASP.NET Core – How to return a 500 response

The simplest way to return a 500 response is to use the Problem() helper method, like this: This produces the following response: The ControllerBase class has many helper methods like Problem() that simplify returning responses. These have several optional parameters that you can use to customize the response. Internally, these helper methods return result objects. … Read more

ASP.NET Core – How to add your own action filter

Action filters allow you to look at requests right before they are routed to an action method (and responses right after they are returned from the action method). The simplest way to add your own action filter in ASP.NET Core is to subclass ActionFilterAttribute and then override the appropriate methods depending on if you want … Read more

ASP.NET Core – Get posted form data in an API Controller

To get posted form data in an API Controller (using the [ApiController] attribute) in ASP.NET Core, use parameters with the [FromForm] attribute. A request to this endpoint would look like this: The form data is a string of key-value pairs (ex: location=United+States). The framework tries to map the form data to parameters by matching the … Read more

C# – Circuit breaker with Polly

In an electrical system, a circuit breaker detects electrical problems and opens the circuit, which blocks electricity from flowing. To get electricity flowing again, you have to close the circuit. The same approach can be implemented in software when you’re sending requests to an external service. This is especially important when you’re sending lots of … Read more

C# – How to use Polly to do retries

Whenever you’re dealing with code that can run into transient errors, it’s a good idea to implement retries. Transient errors, by definition, are temporary and subsequent attempts should succeed. When you retry with a delay, it means you think the the transient error will go away by itself after a short period of time. When … Read more