Tutorials Design Patterns in C#
Pipeline Pattern in ASP.NET Core — Complete Guide
Pipeline Pattern in ASP.NET Core — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.
On this page
Design Patterns in C# · Lesson 59 of 69
Pipeline Pattern in ASP.NET Core
GoF Core ✓ → Enterprise ✓ → Cloud & Craft
Cloud & Craft · 3 — Microservices & interviews · ~10 min · Module 7: ASP.NET Core Architecture Patterns
What is this?
Pipeline pattern chains processing steps for a message/request — middleware, MediatR behaviors, or custom delegates.
Why should you care?
ShopNest import pipeline (parse → validate → save) should be reorderable and testable per step.
See it live — copy this example
Paste into a C# console or class library project and run dotnet run.
public delegate Task PipelineDelegate(PipelineContext ctx);
public sealed class PipelineContext { public string Payload { get; set; } = ""; }
public static class PipelineBuilder
{
public static PipelineDelegate Build(params Func<PipelineContext, PipelineDelegate, Task>[] layers)
{
PipelineDelegate next = _ => Task.CompletedTask;
for (var i = layers.Length - 1; i >= 0; i--)
{
var layer = layers[i];
var current = next;
next = ctx => layer(ctx, current);
}
return next;
}
}
var run = PipelineBuilder.Build(
async (ctx, next) => { ctx.Payload = ctx.Payload.Trim(); await next(ctx); },
async (ctx, next) => { Console.WriteLine(ctx.Payload); await next(ctx); }
);
await run(new PipelineContext { Payload = " HD-100 " });
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Layers wrap next delegates — same onion as ASP.NET middleware.
- Build once; run many times.
Practice next
- Run the trim+print pipeline.
- Add a validate layer that throws on empty.
- Compare to middleware mental model.
- Add timing layer.
- Short-circuit on invalid payload.
Remember
Composable steps. Onion next(). Same idea as middleware.
ShopNest import pipeline
Parse → validate → save as pipeline layers.
Outcome: New validation plugs in without rewriting Run().
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!