app.Run() vs app.Use() in dotnet core

app.Run()
আর app.Use()
— এই দুইটা অনেকের মাথায় গুলিয়ে যায়, কিন্তু যদি একবার ধরতে পারো, তাহলে future এ middleware নিয়ে কাজ করাটা অনেক সহজ হবে।
চলো, এখন আমরা একদম সহজ বাংলা ভাষায় এবং উদাহরণসহ app.Run()
vs app.Use()
বুঝে নিই।
🛠️ Middleware কী সেটা এক লাইনেই:
Middleware মানে হচ্ছে এমন কিছু কোড যেটা HTTP Request/Response আসা-যাওয়ার পথে কাজ করে।
🔁 app.Use()
— অনেকগুলা middleware একটার পর একটা চালাতে দেয়
app.Use(async (context, next) => { Console.WriteLine("Middleware 1 Start"); await next(); // পরের middleware কে যেতে দেয় Console.WriteLine("Middleware 1 End"); });
🧠 ব্যাখ্যা:
-
app.Use()
middleware চেইনে কাজ করে। -
await next()
কল করলে সে পরবর্তী middleware এর কাছে control পাঠায়। -
পরের middleware কাজ শেষে আবার আগেরটাতে ফিরে আসে।
➡️ অর্থাৎ:app.Use()
→ “আগে আমি কিছু কাজ করব, তারপর পরের middleware কে ডাকব, শেষে আবার কিছু করব”।
🚫 app.Run()
— চেইনের শেষ middleware
app.Run(async context => { await context.Response.WriteAsync("Hello from app.Run!"); });
🧠 ব্যাখ্যা:
-
এটা middleware চেইনের শেষ middleware.
-
next()
এর কোনো call নেই। -
একবার এটাতে request ঢুকলে, আর পরের কোনো middleware এ যায় না।
➡️ অর্থাৎ:app.Run()
→ “আমি শেষ middleware, আমিই শেষ কথা!” 😄
🧪 চল একদম সহজ উদাহরণ দেখি:
app.Use(async (context, next) => { Console.WriteLine("🔹 Use 1 - Start"); await next(); Console.WriteLine("🔹 Use 1 - End"); }); app.Use(async (context, next) => { Console.WriteLine("🔹 Use 2 - Start"); await next(); Console.WriteLine("🔹 Use 2 - End"); }); app.Run(async context => { Console.WriteLine("🚀 Run - Executing"); await context.Response.WriteAsync("Final response"); });
👉 Output হবে:
🔹 Use 1 - Start 🔹 Use 2 - Start 🚀 Run - Executing 🔹 Use 2 - End 🔹 Use 1 - End
📋 Summary Table:
Feature | app.Use() | app.Run() |
---|---|---|
Middleware Chain | হ্যাঁ (চেইনের অংশ) | না (চেইনের শেষ) |
next() কল করে? | হ্যাঁ | না |
কয়টা Use করা যায়? | একাধিক | সাধারণত একটা (শেষে) |
Control Pass করে? | হ্যাঁ (পরের middleware এ পাঠায়) | না (নিজেই শেষ করে দেয়) |
🔚 সহজভাবে মনে রাখো:
Use()
→ “আমি কাজ করব, আর পরের middleware কে যেতে দিব।”Run()
→ “আমি কাজ করব, এরপর আর কেউ কাজ করবে না!”