We know we can use
IApplicationBuilder to add built-in middleware components to the request pipeline. We also know there’s an entire list of
UseX() methods available via the interface. Although the built-in middleware provides a wide array of functionality, there may be times when we want to define our own middleware components. Remember when we talked about how middleware delegates perform their processing and then either call the next delegate in the sequence or short-circuit the pipeline? Let’s explore this concept as it relates to custom middleware components.
We are familiar with the
UseX() methods provided by
IApplicationBuilder. However, the interface also provides a generic
Use() method which can be used to process custom middleware components and call the next component in the pipeline. Multiple middleware components can be chained together with the
Use() method. The
Use() method accepts two parameters, the HTTP context and the next middleware component to be called. Let’s take a look at each of these in more detail.
Previously, we discussed how performing actions inside of a web application correspond with sending requests, more specifically, HTTP requests. Well, each HTTP request and its specific data are encapsulated in the HTTP context object (of type
HttpContext). So, when the HTTP context object is passed inside of the
Use() method, we are just passing along the information about an individual HTTP request.
Each middleware component is responsible for making a decision. It must decide to either pass the request to the next component for processing or short-circuit the pipeline by returning a response. If the component is to pass the request to the next delegate in the sequence, the second parameter,
next, is what provides for this functionality.
Click Run to view the bakery site.
We’ve added a custom middleware component that writes
A pass through the pipeline as the HTTP response. Uncomment the line of code in the
app.Use() method which writes out the response and click Run to view the updated results.