ASP.NET Core-এ রাউটিং এবং Middleware দুটি অত্যন্ত গুরুত্বপূর্ণ ধারণা, যা ওয়েব অ্যাপ্লিকেশনের কাজ করার পদ্ধতি নির্ধারণ করে। রাউটিং এর মাধ্যমে নির্দিষ্ট URL এর জন্য একটি নির্দিষ্ট একশন অথবা ভিউ অ্যাসোসিয়েট করা হয়, এবং Middleware বিভিন্ন রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়াতে হস্তক্ষেপ করে বিভিন্ন কার্য সম্পন্ন করে।
রাউটিং হল প্রক্রিয়া যা HTTP রিকোয়েস্টের URL পাথের সাথে মেলানোর মাধ্যমে কনট্রোলার এবং অ্যাকশন মেথডে রিকোয়েস্ট পাঠায়। ASP.NET Core রাউটিং খুবই লচিল এবং কাস্টমাইজেবল।
Default Routing
ASP.NET Core ডিফল্ট রাউটিং কনভেনশন ব্যবহার করে, যেখানে URL প্যাটার্নটি কিছুটা স্ট্যাটিক থাকে। সাধারণত, ডিফল্ট রাউটিং কনভেনশন এভাবে থাকে:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
এখানে, {controller}
, {action}
, এবং {id?}
হল রাউট প্যারামিটার যা URL এর অংশ হিসেবে আসে। উদাহরণস্বরূপ, http://localhost:5000/Home/Index/1
URL এর মাধ্যমে HomeController
এর Index
অ্যাকশন মেথডে রিকোয়েস্ট পাঠানো হবে।
Attribute Routing
ASP.NET Core রাউটিং কনফিগারেশনের একটি উন্নত ফিচার হল Attribute Routing। এর মাধ্যমে, প্রতিটি কনট্রোলার এবং অ্যাকশনের রাউট URL কাস্টমাইজ করা যায়, যেমন:
[Route("home")]
public class HomeController : Controller
{
[Route("index/{id?}")]
public IActionResult Index(int? id)
{
return View();
}
}
এখানে, home/index/1
URL দিয়ে Index
অ্যাকশন কল করা হবে, যেখানে id
প্যারামিটারটি ঐচ্ছিক (Optional)।
Middleware হল এমন একটি কম্পোনেন্ট যা HTTP পিপলাইন (request-response pipeline) এ কাজ করে। যখন একটি HTTP রিকোয়েস্ট আসে, তখন এটি Middleware এর একটি সিরিজের মধ্য দিয়ে প্রক্রিয়াকৃত হয়, এবং শেষে একটি HTTP রেসপন্স তৈরি হয়।
Middleware বিভিন্ন কাজ করতে পারে যেমন:
ASP.NET Core এর Middleware সিস্টেম খুবই শক্তিশালী এবং কাস্টমাইজেবল, এবং এটি সাধারণত স্ট্যাক হিসেবে কাজ করে, যেখানে একের পর এক Middleware চলতে থাকে।
Middleware ইনজেকশন
Middleware অ্যাড করার জন্য Configure
মেথডে app.Use()
ব্যবহার করা হয়:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
এখানে, UseDeveloperExceptionPage
এবং UseExceptionHandler
Middleware এর উদাহরণ, যা অ্যাপ্লিকেশনের ত্রুটি সমাধানে ব্যবহৃত হয়।
Custom Middleware তৈরি
আপনি চাইলে Custom Middleware তৈরি করতে পারেন। একটি সাধারণ কাস্টম Middleware দেখতে এমন হবে:
public class CustomMiddleware
{
private readonly RequestDelegate _next;
public CustomMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext)
{
// Middleware logic (e.g., logging)
await _next(httpContext); // Call the next middleware
}
}
এই Middleware কে Startup.cs
ফাইলে যোগ করা হয়:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<CustomMiddleware>();
}
Static Files Middleware
স্ট্যাটিক ফাইল (যেমন CSS, JavaScript, ইমেজ ফাইল) সার্ভ করার জন্য UseStaticFiles()
Middleware ব্যবহার করা হয়:
app.UseStaticFiles();
Authentication Middleware
অ্যাপ্লিকেশন সিকিউর করার জন্য Authentication Middleware ব্যবহার করা হয়। উদাহরণস্বরূপ, Identity Middleware:
app.UseAuthentication();
Error Handling Middleware
ত্রুটি হ্যান্ডলিং এবং ডিবাগিং এর জন্য Error Handling Middleware ব্যবহার করা হয়:
app.UseExceptionHandler("/Home/Error");
CORS Middleware
Cross-Origin Resource Sharing (CORS) Middleware ব্যবহার করা হয় যেহেতু অ্যাপ্লিকেশনটি বিভিন্ন ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করতে পারে:
app.UseCors(builder =>
builder.WithOrigins("http://example.com")
.AllowAnyMethod()
.AllowAnyHeader());
সারাংশ
ASP.NET Core-এ রাউটিং এবং Middleware ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটির রিকোয়েস্ট-রেসপন্স পিপলাইন নিয়ন্ত্রণ করা যায়। রাউটিং URL প্যাটার্নের সাথে অ্যাকশন মেথড অ্যাসোসিয়েট করে, এবং Middleware বিভিন্ন পর্যায়ে রিকোয়েস্ট প্রক্রিয়া করে, যেমন সিকিউরিটি, লগিং, বা রেসপন্স মডিফিকেশন। কাস্টম Middleware তৈরি করা, স্ট্যাটিক ফাইল সার্ভ করা, এবং Authentication এর মতো সাধারণ ফিচারও Middleware এর মাধ্যমে ইমপ্লিমেন্ট করা যায়।
Routing হল একটি প্রক্রিয়া যার মাধ্যমে ASP.Net Core অ্যাপ্লিকেশন ইনকামিং HTTP রিকোয়েস্টকে নির্দিষ্ট কন্ট্রোলার এবং একশন মেথডের সাথে ম্যাপ করে। রাউটিং কনফিগারেশন সঠিকভাবে না করলে অ্যাপ্লিকেশনটি সঠিকভাবে রিকোয়েস্ট প্রক্রেস করতে পারবে না। ASP.Net Core এ রাউটিং কনফিগার করা বেশ সহজ, এবং আপনি এটি Startup.cs
ফাইলে করতে পারেন।
Route Configuration
ASP.Net Core অ্যাপ্লিকেশনে রাউটিং কনফিগার করার জন্য সাধারণত Configure
মেথডে UseRouting
এবং UseEndpoints
মেথড ব্যবহার করা হয়।
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// রাউটিং কনফিগার করা
app.UseRouting(); // রাউটিং সিস্টেম চালু করবে
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
উপরের কোডে, MapControllerRoute
মেথড দিয়ে রাউটিং প্যাটার্নটি কনফিগার করা হয়েছে। এখানে {controller=Home}
মানে HomeController
ডিফল্ট কন্ট্রোলার হবে, {action=Index}
মানে Index
অ্যাকশন মেথড ডিফল্ট হবে, এবং {id?}
হলো একটি অপশনাল প্যারামিটার।
ASP.Net Core এ রাউটিং প্যাটার্ন সাধারণত URL প্যাটার্নের মাধ্যমে নির্ধারণ করা হয়। রাউটিং প্যাটার্নের জন্য কিছু সাধারণ টেমপ্লেট নীচে দেওয়া হল:
{controller}
: URL-এ কন্ট্রোলারের নাম।{action}
: URL-এ একশন মেথডের নাম।{id?}
: একটি অপশনাল প্যারামিটার (যদি প্রযোজ্য হয়)।উদাহরণস্বরূপ, যদি আমরা MapControllerRoute
ব্যবহার করি:
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
এই রাউটিং প্যাটার্নটি নির্দেশ করে যে, যদি URL এর মধ্যে কোনো কন্ট্রোলার বা অ্যাকশন নাম উল্লেখ না থাকে, তাহলে ডিফল্টভাবে HomeController
এর Index
অ্যাকশনটি কল হবে। যদি id
প্যারামিটার দেওয়া থাকে, তবে সেটি ঐ অ্যাকশনে পাস হবে।
ASP.Net Core এ আপনি Attribute Routing ব্যবহার করে URL এর সাথে কন্ট্রোলার এবং অ্যাকশন মেথড নির্দিষ্ট করতে পারেন। এর মাধ্যমে আপনি প্রতিটি কন্ট্রোলার এবং একশন মেথডে রাউটিং প্যাটার্ন নির্ধারণ করতে পারেন।
Attribute Routing উদাহরণ:
[Route("home")]
public class HomeController : Controller
{
[Route("")]
public IActionResult Index()
{
return View();
}
[Route("about")]
public IActionResult About()
{
return View();
}
}
এখানে HomeController
এর Index
অ্যাকশনটি /home
পাথের মাধ্যমে এক্সেস হবে এবং About
অ্যাকশনটি /home/about
পাথের মাধ্যমে এক্সেস হবে।
ASP.Net Core রাউটিং প্যাটার্নে কনস্ট্রেইন্টস ব্যবহার করে URL প্যারামিটার গুলোর বৈধতা যাচাই করা সম্ভব। যেমন, আপনি id
প্যারামিটারের জন্য নির্দিষ্ট করতে পারেন যে তা একটি সংখ্যা হতে হবে।
Route Constraints উদাহরণ:
[Route("product/{id:int}")]
public IActionResult ProductDetails(int id)
{
return View();
}
এখানে {id:int}
কনস্ট্রেইন্টটি নির্দেশ করে যে id
প্যারামিটারটি শুধুমাত্র পূর্ণসংখ্যা হতে হবে। যদি প্যারামিটারটি অন্য ধরনের হয়, তবে রিকোয়েস্টটি ব্যর্থ হবে এবং 404 Not Found
ত্রুটি দেখাবে।
একই কন্ট্রোলার বা একশন মেথডের জন্য একাধিক রাউটিং প্যাটার্ন নির্ধারণ করা যেতে পারে।
Multiple Routes উদাহরণ:
[Route("product")]
[Route("item")]
public IActionResult ProductDetails()
{
return View();
}
এখানে ProductDetails
একশনটি /product
এবং /item
উভয় রাউটে এক্সেস করা যাবে।
ASP.Net Core এ রাউটিং কনফিগার করা একটি সহজ প্রক্রিয়া। আপনি সাধারণভাবে Configure
মেথডে UseRouting
এবং UseEndpoints
ব্যবহার করে রাউটিং প্যাটার্ন সেট করতে পারেন। এছাড়া Attribute Routing, Route Constraints, এবং Multiple Routes এর মতো ফিচারগুলো ব্যবহার করে আরো উন্নত রাউটিং কনফিগারেশন করা সম্ভব। এই কনফিগারেশনগুলো আপনার অ্যাপ্লিকেশনকে আরও ইউজার-ফ্রেন্ডলি এবং সুগম করে তোলে।
Attribute Routing হল ASP.NET Core-এ রাউটিং কনফিগারেশনের একটি শক্তিশালী এবং নমনীয় পদ্ধতি। এই পদ্ধতিতে, রাউটিং তথ্য সরাসরি কন্ট্রোলার এবং অ্যাকশন মেথডগুলির উপর অ্যাট্রিবিউট আকারে নির্ধারণ করা হয়, যার ফলে রাউটিং কনফিগারেশন আরও পরিষ্কার এবং সহজে পরিচালনাযোগ্য হয়।
Attribute Routing এর মাধ্যমে আপনি কন্ট্রোলার এবং কন্ট্রোলারের মেথডগুলিতে রাউটিং কনফিগারেশন নির্দিষ্ট করতে পারেন। এর ফলে, URL প্যাটার্ন সরাসরি অ্যাকশন মেথডের উপরে সংজ্ঞায়িত করা যায়। এটি সাধারণত Route অ্যাট্রিবিউট ব্যবহার করে কনফিগার করা হয়।
এই পদ্ধতির প্রধান সুবিধা হলো এটি রাউটিংকে কন্ট্রোলারের মেথডের কাছে এনে দেয়, যার ফলে কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণ আরও সহজ হয়ে যায়।
ASP.NET Core-এ Attribute Routing কাজ করার জন্য, [Route] অ্যাট্রিবিউট ব্যবহার করা হয়। এই অ্যাট্রিবিউট কন্ট্রোলার বা অ্যাকশন মেথডের উপরে সংযোজিত হয় এবং এর মাধ্যমে রাউটিং প্যাটার্ন নির্ধারণ করা হয়।
উদাহরণ: কিভাবে Attribute Routing কাজ করে
using Microsoft.AspNetCore.Mvc;
namespace MyApp.Controllers
{
[Route("api/[controller]")]
public class ProductsController : Controller
{
// GET api/products
[HttpGet]
public IActionResult GetAllProducts()
{
return Ok(new { message = "Getting all products" });
}
// GET api/products/5
[HttpGet("{id}")]
public IActionResult GetProductById(int id)
{
return Ok(new { message = $"Getting product with ID {id}" });
}
// POST api/products
[HttpPost]
public IActionResult CreateProduct([FromBody] Product product)
{
return Ok(new { message = "Product created" });
}
}
}
এখানে, [Route("api/[controller]")]) অ্যাট্রিবিউটটি ProductsController
কন্ট্রোলারের জন্য রাউট নির্ধারণ করে, যেখানে [controller]
কে কন্ট্রোলারের নাম (যেমন Products
) দ্বারা প্রতিস্থাপন করা হয়। এর পরে, [HttpGet], [HttpGet("{id}")], এবং [HttpPost] অ্যাট্রিবিউটগুলি অ্যাকশন মেথডগুলির জন্য নির্দিষ্ট HTTP পদ্ধতিগুলি চিহ্নিত করে।
{id}
বা {name}
। এটি ডাইনামিক রাউট তৈরি করতে সাহায্য করে।{id:int}
।এখানে একটি Attribute Routing উদাহরণ দেওয়া হলো যেখানে কন্ট্রোলার এবং অ্যাকশন মেথডগুলির রাউটিং নির্দিষ্ট করা হয়েছে:
using Microsoft.AspNetCore.Mvc;
namespace MyApp.Controllers
{
// Controller level route
[Route("api/[controller]")]
public class ProductsController : Controller
{
// GET api/products
[HttpGet]
public IActionResult GetAllProducts()
{
return Ok("Getting all products");
}
// GET api/products/5
[HttpGet("{id:int}")]
public IActionResult GetProduct(int id)
{
return Ok($"Getting product with ID {id}");
}
// POST api/products
[HttpPost]
public IActionResult CreateProduct([FromBody] Product product)
{
return Ok("Product created successfully");
}
// PUT api/products/5
[HttpPut("{id}")]
public IActionResult UpdateProduct(int id, [FromBody] Product product)
{
return Ok($"Product with ID {id} updated");
}
// DELETE api/products/5
[HttpDelete("{id}")]
public IActionResult DeleteProduct(int id)
{
return Ok($"Product with ID {id} deleted");
}
}
}
এখানে, প্রতিটি মেথডে HttpGet
, HttpPost
, HttpPut
, এবং HttpDelete
অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যা তাদের সম্পর্কিত HTTP পদ্ধতি নির্দেশ করে। এছাড়া, {id:int} কনস্ট্রেইন্ট ব্যবহার করা হয়েছে, যা নিশ্চিত করে যে id
প্যারামিটারটি একটি পূর্ণসংখ্যা হবে।
Attribute Routing-এ কনস্ট্রেইনট ব্যবহার করলে URL প্যারামিটারগুলির ধরন এবং মান নির্ধারণ করা যেতে পারে। যেমন:
{id:int}
: এটি নিশ্চিত করে যে id
একটি পূর্ণসংখ্যা (integer) হবে।{name:length(10)}
: এটি নিশ্চিত করে যে name
প্যারামিটারটির দৈর্ঘ্য ১০-এর কম হবে।এটি কন্ট্রোলার এবং অ্যাকশন মেথডগুলির মধ্যে সুনির্দিষ্ট রাউটিং কনফিগারেশন প্রদান করে।
Attribute Routing হল ASP.NET Core এ একটি শক্তিশালী রাউটিং পদ্ধতি, যা URL প্যাটার্ন সরাসরি কন্ট্রোলার এবং অ্যাকশন মেথডের উপর অ্যাট্রিবিউট আকারে নির্ধারণ করতে সাহায্য করে। এর মাধ্যমে আপনি সহজে এবং পরিষ্কারভাবে কনফিগারেশন করতে পারেন, এবং ডাইনামিক, কাস্টমাইজড রাউট তৈরি করতে সক্ষম হন। Attribute Routing এর প্রধান সুবিধা হলো কোডের পাঠযোগ্যতা বাড়ানো এবং রাউটিং ম্যানেজমেন্ট সহজতর করা।
Middleware হল সফটওয়্যার বা কোডের একটি স্তর যা ASP.NET Core অ্যাপ্লিকেশনটির রিকোয়েস্ট-পদ্ধতি চেইনে ব্যবহৃত হয়। এটি একটি পেইজ বা HTTP রিকোয়েস্ট প্রসেসিং সিস্টেমে ইনপুট এবং আউটপুটের মধ্যে একটি "মাঝখানে" অবস্থান নেয়। সহজভাবে বললে, Middleware কোডের একাধিক অংশ একে অপরের সাথে যোগাযোগ করতে সক্ষম করে, যাতে সার্ভার ক্লায়েন্ট থেকে আসা রিকোয়েস্ট এবং সার্ভার থেকে বের হওয়া রেসপন্স প্রসেস করতে পারে।
এটি অ্যাপ্লিকেশনের রিকোয়েস্ট লাইফসাইকেল পরিচালনার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে এবং সাধারণত একটি pipeline (পাইপলাইন) হিসেবে কাজ করে, যেখানে একাধিক middleware একে অপরের সাথে সম্পর্কিতভাবে কাজ করে।
Middleware সাধারণত রিকোয়েস্ট রিসিভ করার পর প্রথমে প্রসেস শুরু করে এবং তারপর রেসপন্স আউটপুট দেয়। যখন একটি HTTP রিকোয়েস্ট একটি ASP.NET Core অ্যাপ্লিকেশনে আসে, তখন তা আগে middleware পিপলাইনের মধ্য দিয়ে প্রবাহিত হয় এবং প্রত্যেকটি middleware এর মধ্যে কিছু নির্দিষ্ট কাজ সম্পাদন করে। এর পরে, রেসপন্স আবার middleware পিপলাইনে মাধ্যমে ফিরে যায়।
একটি সাধারণ middleware পিপলাইন নিম্নরূপ কাজ করে:
next()
মেথড কল করে। এর মাধ্যমে পরবর্তী middleware কাজ শুরু করবে।ASP.NET Core অ্যাপ্লিকেশনগুলিতে বিভিন্ন ধরনের middleware ব্যবহৃত হয়। কিছু উদাহরণ হলো:
ASP.NET Core অ্যাপ্লিকেশনে middleware কনফিগার করা হয় Startup.cs
ফাইলের Configure
মেথডে। এখানে আপনি middleware গুলি যোগ করতে পারেন এবং তাদের ক্রম ঠিক করতে পারেন।
public class Startup
{
public void Configure(IApplicationBuilder app)
{
// Default middleware
app.UseRouting(); // Request routing middleware
app.UseAuthentication(); // Authentication middleware
app.UseAuthorization(); // Authorization middleware
// Custom middleware
app.Use(async (context, next) =>
{
// Custom logic before passing the request
await next.Invoke();
// Custom logic after the request has passed through the pipeline
});
// Static files middleware
app.UseStaticFiles(); // Serves static files like HTML, CSS, JS
// Fallback to a page or other action if nothing matches
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers(); // MVC Controller endpoints
});
}
}
এখানে Use
মেথডটি বিভিন্ন middleware যুক্ত করার জন্য ব্যবহার করা হয়। প্রাথমিকভাবে, middleware গুলি রিকোয়েস্টের উপর কাজ করে, তারপর রেসপন্স ফেরত পাঠায়।
ASP.NET Core-এ custom middleware তৈরি করা খুবই সহজ। সাধারণত, একটি ক্লাস তৈরি করা হয় যা IMiddleware
ইন্টারফেস ইমপ্লিমেন্ট করে বা Invoke
মেথডের মাধ্যমে কার্যকর করা হয়।
এখানে একটি উদাহরণ দেওয়া হলো:
public class MyCustomMiddleware
{
private readonly RequestDelegate _next;
public MyCustomMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
// Custom logic before passing to next middleware
Console.WriteLine("Request received by custom middleware");
await _next(context); // Passing control to next middleware
// Custom logic after the request has passed through the pipeline
Console.WriteLine("Response sent from custom middleware");
}
}
এটি এরপর Startup.cs
-এ Configure
মেথডে যুক্ত করা হয়:
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<MyCustomMiddleware>();
}
Middleware হল .NET Core অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ যা HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যে একটি পিপলাইন তৈরি করে। এটি বিভিন্ন কাজ যেমন Authentication, Authorization, লোগিং, এক্সসেপশন হ্যান্ডলিং এবং স্ট্যাটিক ফাইল সার্ভিংয়ের জন্য ব্যবহৃত হয়। ASP.NET Core অ্যাপ্লিকেশনে middleware কনফিগার এবং কাস্টম middleware তৈরি করা সহজ, যা অ্যাপ্লিকেশনকে আরও কার্যকর এবং কাস্টমাইজেবল করে তোলে।
Middleware হলো ASP.NET Core অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ, যা HTTP রিকোয়েস্ট এবং রেসপন্স প্রসেসের মধ্যে কোনো একটি অতিরিক্ত কার্যক্রম সম্পাদন করে। Custom Middleware তৈরি করা মানে হলো আপনি আপনার প্রয়োজন অনুযায়ী একটি নতুন middleware কম্পোনেন্ট তৈরি করবেন যা রিকোয়েস্ট এবং রেসপন্স সাইকেলে নিজস্ব লজিক বা কার্যক্রম যোগ করবে।
ASP.NET Core অ্যাপ্লিকেশন ডেভেলপ করার সময় প্রাথমিকভাবে বেশ কিছু বিল্ট-ইন Middleware পাওয়া যায়, যেমন Authentication, Authorization, Caching ইত্যাদি। কিন্তু অনেক সময় কিছু বিশেষ কার্যক্রম সম্পাদনের জন্য কাস্টম Middleware তৈরি করতে হতে পারে।
প্রথমে একটি ক্লাস তৈরি করতে হবে যা IMiddleware ইন্টারফেস বা RequestDelegate ব্যবহার করবে।
public class CustomMiddleware
{
private readonly RequestDelegate _next;
public CustomMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
// Middleware এর শুরুতে কিছু কার্যক্রম করা
Console.WriteLine("Request started");
// রিকোয়েস্ট পরবর্তী Middleware বা রেসপন্স প্রসেসে পাস করা
await _next(context);
// Middleware এর শেষে কিছু কার্যক্রম করা
Console.WriteLine("Response completed");
}
}
এই কোডে, RequestDelegate
হলো পরবর্তী Middleware অথবা রেসপন্স হ্যান্ডলারকে কল করার জন্য ব্যবহার করা হয়। InvokeAsync
মেথডে আপনি আপনার কার্যক্রম যোগ করতে পারেন। এখানে আমরা কেবল রিকোয়েস্ট স্টার্ট এবং রেসপন্স কমপ্লিট হওয়ার সময় কনসোলে মেসেজ লিখেছি।
আপনার কাস্টম Middleware অ্যাপ্লিকেশনে ব্যবহারের জন্য Startup.cs (বা Program.cs যদি .NET 6+ ব্যবহার করেন) ফাইলে রেজিস্টার করতে হবে। এখানে Configure
মেথডে UseMiddleware
মেথড ব্যবহার করে Middleware রেজিস্টার করা হয়।
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// কাস্টম Middleware রেজিস্টার করা
app.UseMiddleware<CustomMiddleware>();
// অন্য বিল্ট-ইন Middleware গুলি
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello, world!");
});
});
}
}
এখানে UseMiddleware<CustomMiddleware>()
ব্যবহার করে আমাদের কাস্টম Middleware অ্যাপ্লিকেশনে যুক্ত করা হয়েছে। এর মানে হলো, যখন একটি HTTP রিকোয়েস্ট আসবে, তখন সেই রিকোয়েস্ট প্রথমে CustomMiddleware দিয়ে যাবে এবং তারপর অন্যান্য Middleware ও হ্যান্ডলারগুলো কাজ করবে।
কাস্টম Middleware তৈরি করতে গিয়ে আপনি বিভিন্ন ধরনের কাজ করতে পারেন, যেমন:
ASP.NET Core অ্যাপ্লিকেশনে Middleware গুলি চেইন আকারে একে অপরের সঙ্গে যুক্ত থাকে। একটি Middleware পরবর্তী Middleware কে কল করার মাধ্যমে পুরো HTTP রিকোয়েস্ট প্রসেস সম্পন্ন হয়।
ধরা যাক, আপনি যদি একটি কাস্টম Middleware তৈরি করতে চান যা রিকোয়েস্টের হেডার চেক করে দেখবে যে, "X-Api-Key" নামক একটি হেডার আছে কিনা, এবং যদি না থাকে তবে 401 Unauthorized রেসপন্স ফিরিয়ে দেবে।
public class ApiKeyMiddleware
{
private readonly RequestDelegate _next;
public ApiKeyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
if (!context.Request.Headers.ContainsKey("X-Api-Key"))
{
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
await context.Response.WriteAsync("API Key is missing");
return;
}
// API Key রয়েছে, পরবর্তী Middleware এ পাস করা
await _next(context);
}
}
এখন, এই Middleware কে Startup.cs
-এ রেজিস্টার করলে, আপনি যে কোনো HTTP রিকোয়েস্টে X-Api-Key
হেডার না থাকলে 401 Unauthorized রেসপন্স পাবেন।
Custom Middleware তৈরি করা ASP.NET Core অ্যাপ্লিকেশনের একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে অ্যাপ্লিকেশনের HTTP রিকোয়েস্ট প্রসেসে নিজের প্রয়োজনীয় কার্যক্রম যোগ করার সুযোগ দেয়। Middleware তৈরি এবং কনফিগার করার মাধ্যমে আপনি অ্যাপ্লিকেশনের সিকিউরিটি, লগিং, এবং কাস্টম কাজগুলো সম্পন্ন করতে পারেন। Middleware গুলোর সঠিক অর্ডার এবং কার্যক্রম নিশ্চিত করা গুরুত্বপূর্ণ যাতে অ্যাপ্লিকেশন সঠিকভাবে কাজ করে।
common.read_more