Routing এবং Middleware

Microsoft Technologies - এএসপি ডট নেট কোর (ASP.Net Core)
260
260

ASP.NET Core একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক, যা Routing এবং Middleware এর মাধ্যমে ওয়েব রিকোয়েস্ট এবং রেসপন্স পরিচালনা করে। এই দুটি উপাদান অ্যাপ্লিকেশন ডেভেলপমেন্টে গুরুত্বপূর্ণ ভূমিকা পালন করে, এবং এগুলি একে অপরের সঙ্গে কাজ করে, যাতে রিকোয়েস্ট প্রক্রেসিং সহজ এবং কার্যকরী হয়।


Routing

Routing হলো ASP.NET Core এর একটি প্রক্রিয়া, যা HTTP রিকোয়েস্টকে সঠিক কন্ট্রোলার বা এন্ডপয়েন্টে পাঠানোর কাজ করে। এটি একটি রিকোয়েস্টের URL-পাথ এবং HTTP মেথডের ভিত্তিতে সঠিক কন্ট্রোলার অ্যাকশন বা Razor Page নির্বাচন করে। ASP.NET Core-এ Routing দুটি ধরনের হয়: Convention-based Routing এবং Attribute Routing

Convention-based Routing

এটি ASP.NET Core অ্যাপ্লিকেশনের ডিফল্ট রাউটিং পদ্ধতি। Convention-based Routing সাধারণত কন্ট্রোলার এবং অ্যাকশনের নাম অনুযায়ী রিকোয়েস্টকে সঠিক পথে নির্দেশিত করে। উদাহরণস্বরূপ:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult About()
    {
        return View();
    }
}

এখানে, /Home/Index বা /Home/About রিকোয়েস্ট আসলে, ASP.NET Core সেগুলোকে যথাক্রমে Index() এবং About() অ্যাকশনে রাউট করবে।

Attribute Routing

Attribute Routing রাউটিং কনভেনশনগুলোর পরিবর্তে আপনি কন্ট্রোলার অথবা অ্যাকশনে সরাসরি রাউট প্যাটার্ন নির্ধারণ করতে পারেন। এটি অনেক বেশি ফ্লেক্সিবিলিটি প্রদান করে।

[Route("Home")]
public class HomeController : Controller
{
    [Route("Index")]
    public IActionResult Index()
    {
        return View();
    }

    [Route("About")]
    public IActionResult About()
    {
        return View();
    }
}

এখানে /Home/Index বা /Home/About URL সরাসরি Index() এবং About() অ্যাকশনের সাথে যুক্ত হবে।

Route Parameter

ASP.NET Core রাউটিং URL এর মধ্যে ডাইনামিক প্যারামিটার ব্যবহার করতে পারে। উদাহরণস্বরূপ:

[Route("product/{id}")]
public IActionResult ProductDetail(int id)
{
    // id দিয়ে প্রোডাক্টের ডিটেইল দেখানো হবে
    return View();
}

এখানে, /product/1 রিকোয়েস্ট আসলে ProductDetail(1) অ্যাকশনটি কল হবে।

Routing Configuration

Startup.cs ফাইলে Configure মেথডে রাউটিং কনফিগার করা হয়:

public void Configure(IApplicationBuilder app)
{
    app.UseRouting(); // রাউটিং ব্যবস্থাকে সক্রিয় করে

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

এখানে, MapControllerRoute পদ্ধতির মাধ্যমে ডিফল্ট রাউটিং কনফিগার করা হয়েছে।


Middleware

Middleware হলো ASP.NET Core এর একটি গুরুত্বপূর্ণ অংশ, যা রিকোয়েস্ট এবং রেসপন্স পাইপলাইনে বিভিন্ন কাজ করে। Middleware গুলি একের পর এক রিকোয়েস্ট প্রসেস করে এবং প্রতিটি Middleware একটি নির্দিষ্ট কাজ সম্পন্ন করার পর রিকোয়েস্ট পরবর্তী Middleware-এ প্রেরণ করে। Middleware রিকোয়েস্ট হ্যান্ডলিং, রেসপন্স মডিফিকেশন, লগিং, অথেন্টিকেশন, অথরাইজেশন, এবং আরও অনেক কাজ করতে ব্যবহৃত হয়।

Middleware কিভাবে কাজ করে

ASP.NET Core অ্যাপ্লিকেশন যখন HTTP রিকোয়েস্ট পায়, তখন এটি Middleware পাইপলাইনের মধ্যে দিয়ে চলে। প্রতিটি Middleware রিকোয়েস্ট প্রসেস করে এবং পরবর্তী Middleware-এ পাঠায়। নিচের কোডে Middleware কনফিগারেশন দেখানো হলো:

public void Configure(IApplicationBuilder app)
{
    app.Use(async (context, next) =>
    {
        // রিকোয়েস্ট প্রসেস করার আগে কিছু করা
        await next.Invoke();  // পরবর্তী Middleware-এ রিকোয়েস্ট পাঠানো
        // রেসপন্স প্রসেস করার পরে কিছু করা
    });

    app.UseRouting(); // রাউটিং ব্যবস্থাকে সক্রিয় করে
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

এখানে, প্রথম Middleware রিকোয়েস্ট প্রসেস করার আগে কিছু কাজ করছে এবং পরবর্তী Middleware-এ রিকোয়েস্ট প্রেরণ করছে।

Built-in Middleware

ASP.NET Core অনেক ধরনের বিল্ট-ইন Middleware প্রদান করে, যেমন:

  • Static Files Middleware: ওয়েব অ্যাপ্লিকেশনের জন্য স্ট্যাটিক ফাইল (যেমন CSS, JavaScript, ইমেজ) সরবরাহ করে।
  • Authentication Middleware: অথেন্টিকেশন প্রক্রিয়া পরিচালনা করে।
  • Authorization Middleware: অথোরাইজেশন চেক করে, ব্যবহারকারীকে নির্দিষ্ট রিসোর্স অ্যাক্সেস দেওয়ার অনুমতি দেয়।
  • Error Handling Middleware: অ্যাপে কোনো ত্রুটি ঘটলে সেটি হ্যান্ডল করে এবং ব্যবহারকারীকে উপযুক্ত ত্রুটি মেসেজ প্রদান করে।
  • CORS Middleware: Cross-Origin Resource Sharing (CORS) সেটআপ করে, যাতে বিভিন্ন ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা যায়।

Custom Middleware

আপনি যদি নিজস্ব কাজ করতে চান, তবে Custom Middleware তৈরি করা সম্ভব। উদাহরণস্বরূপ, একটি কাস্টম Middleware যা লগিং করে:

public class RequestLoggingMiddleware
{
    private readonly RequestDelegate _next;

    public RequestLoggingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // রিকোয়েস্ট লগ করা
        Console.WriteLine($"Request received at {DateTime.Now}");
        await _next(context);  // পরবর্তী Middleware-এ রিকোয়েস্ট পাঠানো
    }
}

এবং Configure মেথডে কাস্টম Middleware যুক্ত করা:

public void Configure(IApplicationBuilder app)
{
    app.UseMiddleware<RequestLoggingMiddleware>();  // কাস্টম Middleware
    app.UseRouting();
}

Middleware এর ব্যবহার

Middleware গুলি সাধারণত Use পদ্ধতি ব্যবহার করে অ্যাপ্লিকেশনের পাইপলাইনে যোগ করা হয়:

public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles();  // Static files সরবরাহ করার জন্য Middleware
    app.UseAuthentication();  // Authentication Middleware
    app.UseAuthorization();  // Authorization Middleware
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Routing এবং Middleware এর সম্পর্ক

  • Routing অ্যাপ্লিকেশনকে নির্দেশ করে কোথায় রিকোয়েস্টটি যাবে (Controller বা Razor Page)।
  • Middleware রিকোয়েস্টটি কোথায় যাচ্ছে সে বিষয়টি নিয়ন্ত্রণ করে এবং কিছু প্রক্রিয়া (যেমন অথেন্টিকেশন, লগিং, এবং রেসপন্স মডিফিকেশন) সম্পাদন করে।

অর্থাৎ, Routing এবং Middleware একে অপরকে সম্পূরকভাবে কাজ করতে সাহায্য করে, যেখানে Middleware প্রক্রিয়াগুলি রিকোয়েস্টের আগে বা পরে বিভিন্ন কাজ সম্পাদন করে এবং Routing সঠিক কন্ট্রোলার অ্যাকশনে রিকোয়েস্ট প্রেরণ করে।


ASP.NET Core-এর Routing এবং Middleware এর সমন্বয়ে ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্ট আরও সহজ, শক্তিশালী এবং মডুলার হয়ে ওঠে। Routing রিকোয়েস্টের গন্তব্য নির্ধারণ করে এবং Middleware বিভিন্ন প্রক্রিয়ায় তা পরিচালনা করে।

common.content_added_by

ASP.NET Core Routing এর পরিচিতি

268
268

ASP.NET Core-এ Routing হলো একটি গুরুত্বপূর্ণ প্রক্রিয়া, যার মাধ্যমে HTTP রিকোয়েস্টের উপর ভিত্তি করে কন্ট্রোলার এবং অ্যাকশন নির্বাচন করা হয়। এটি ইউজার রিকোয়েস্টকে সঠিক কন্ট্রোলার ও অ্যাকশন মেথডের সাথে সংযুক্ত করতে সাহায্য করে। Routing আপনাকে একটি URL প্যাটার্নের ভিত্তিতে রিকোয়েস্ট ম্যানেজ করার সুযোগ দেয়, যা ওয়েব অ্যাপ্লিকেশনের নির্দিষ্ট কার্যকলাপের সাথে সম্পর্কিত।

ASP.NET Core-এ Routing এর মাধ্যমে ইউজাররা সহজে নির্দিষ্ট অ্যাকশন, কন্ট্রোলার বা পেজে প্রবেশ করতে পারে URL-এর মাধ্যমে। Routing এক ধরণের নেভিগেশন সিস্টেম, যা নির্ধারণ করে কোন কন্ট্রোলার বা মেথডে রিকোয়েস্ট যাবে।


ASP.NET Core Routing এর কার্যপ্রণালী

ASP.NET Core-এ Routing সাধারণত URL প্যাটার্নের সাথে মিল রেখে কন্ট্রোলার এবং অ্যাকশন সিলেক্ট করে। সাধারণত নিম্নলিখিত পদক্ষেপগুলোর মাধ্যমে কাজ করে:

  1. URL ম্যাচিং: ইউজারের দেয়া URL-এর সাথে যে কোন Routing প্যাটার্ন মেলে, সেটি নির্বাচিত হয়।
  2. Route Data: যেসকল প্যারামিটার URL থেকে নেওয়া হয়, তা route data হিসেবে পাস করা হয়।
  3. Controller এবং Action Selection: নির্বাচিত URL প্যাটার্ন অনুযায়ী Controller এবং Action সিলেক্ট করা হয় এবং রিকোয়েস্ট প্রক্রিয়া শুরু হয়।
  4. Action Execution: নির্ধারিত Action মেথড চলানো হয় এবং ইউজারের জন্য রেসপন্স প্রস্তুত করা হয়।

ASP.NET Core Routing এর ধরন

ASP.NET Core-এ Routing দুই ধরনের হয়ে থাকে:

1. Conventional Routing (স্বাভাবিক Routing)

এটি হল ডিফল্ট routing সিস্টেম যা URL প্যাটার্নের ওপর ভিত্তি করে controller এবং action নির্বাচন করে। সাধারণত Startup.cs ফাইলে এটি কনফিগার করা হয়।

উদাহরণ:

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

এই কনফিগারেশনে:

  • {controller=Home}: যদি কোনো controller নির্ধারণ না করা হয়, তাহলে Home কন্ট্রোলার ব্যবহার হবে।
  • {action=Index}: যদি কোনো action নির্ধারণ না করা হয়, তাহলে Index action চলবে।
  • {id?}: id প্যারামিটারটি ঐচ্ছিক।

URL এর উদাহরণ:

  • https://yourdomain/Home/Index → Home কন্ট্রোলারের Index অ্যাকশনকে কল করবে।
  • https://yourdomain/Home/About → Home কন্ট্রোলারের About অ্যাকশনকে কল করবে।
  • https://yourdomain/Products/Details/5 → Products কন্ট্রোলারের Details অ্যাকশন, এবং 5 ID প্যারামিটারটি পাঠাবে।

2. Attribute Routing (এট্রিবিউট Routing)

এট্রিবিউট Routing ব্যবহার করে প্রতিটি কন্ট্রোলার এবং অ্যাকশনের উপর সরাসরি URL প্যাটার্ন নির্ধারণ করা যায়। এটি একটি ফлексিবল এবং ডাইনামিক পদ্ধতি, যেখানে প্রতিটি কন্ট্রোলার ও অ্যাকশনের উপরে Route এট্রিবিউট দেয়া হয়।

উদাহরণ:

[Route("products")]
public class ProductsController : Controller
{
    [Route("{id}")]
    public IActionResult Details(int id)
    {
        // Product details logic
        return View();
    }
    
    [Route("create")]
    public IActionResult Create()
    {
        // Create product logic
        return View();
    }
}

এখানে:

  • /products/5 → ProductsController-এর Details অ্যাকশন, যেখানে id=5 প্যারামিটার পাঠানো হবে।
  • /products/create → ProductsController-এর Create অ্যাকশন কল করবে।

3. Attribute Routing with Parameters

এট্রিবিউট Routing-এর সাথে প্যারামিটার ব্যবহার করা যেতে পারে যাতে URL প্যাটার্নে ডাইনামিক ভ্যালু পাঠানো যায়।

উদাহরণ:

[Route("order/{orderId}")]
public IActionResult OrderDetails(int orderId)
{
    // Fetch order details using orderId
    return View();
}

এই কনফিগারেশনে, URL যেমন /order/123 ব্যবহার করলে OrderDetails অ্যাকশন কল হবে এবং orderId প্যারামিটার হিসেবে 123 পাঠানো হবে।


ASP.NET Core Routing এর উন্নত বৈশিষ্ট্য

1. Route Constraints

ASP.NET Core Routing আপনাকে route প্যাটার্নে কনস্ট্রেইন্ট (যেমন: একটি প্যারামিটারটি সঠিক ধরনের হতে হবে) নির্ধারণ করার সুযোগ দেয়।

উদাহরণ:

[Route("products/{id:int}")]
public IActionResult GetProduct(int id)
{
    // Only integer values for id will match
    return View();
}

এখানে id:int কনস্ট্রেইন্ট নির্ধারণ করেছে যে id একটি পূর্ণসংখ্যা হতে হবে।

2. Default Values

Routing প্যাটার্নে আপনি ডিফল্ট ভ্যালু দিতে পারেন, যা ইউজার যদি কোনো প্যারামিটার না পাঠায় তবে সেগুলো ব্যবহার হবে।

উদাহরণ:

[Route("products/{id?}")]
public IActionResult ShowProduct(int? id = 1)
{
    // Default id = 1 if no id is provided
    return View();
}

3. Route Prefixing

Route Prefix ব্যবহার করে একটি নির্দিষ্ট কন্ট্রোলারের সব অ্যাকশনের জন্য সাধারণ একটি URL প্যাটার্ন নির্ধারণ করা যেতে পারে।

উদাহরণ:

[Route("admin/[controller]")]
public class ProductsController : Controller
{
    [Route("list")]
    public IActionResult List()
    {
        return View();
    }

    [Route("details/{id}")]
    public IActionResult Details(int id)
    {
        return View();
    }
}

এখানে admin/products/list বা admin/products/details/1 এই ধরনের URL ব্যবহার করা যাবে।


Routing এর সুবিধা

  1. URL Mapping সহজতর: Routing URL এবং অ্যাকশনের মধ্যে সহজে মেলবন্ধন তৈরি করে, যা অ্যাপ্লিকেশন ডেভেলপমেন্টকে অনেক সহজ করে।
  2. ডাইনামিক URL Handling: প্যারামিটার, কনস্ট্রেইন্ট, এবং ডিফল্ট ভ্যালু ব্যবহার করে ইউজার ফ্রেন্ডলি এবং ডাইনামিক URL তৈরি করা যায়।
  3. Flexible URL Structure: Attribute routing এর মাধ্যমে কন্ট্রোলার এবং অ্যাকশন URL সুনির্দিষ্টভাবে কাস্টমাইজ করা যায়।
  4. Scalability: Routing সিস্টেম সহজেই অ্যাপ্লিকেশন স্কেলিংয়ে সহায়তা করে, যেখানে নতুন URL প্যাটার্ন যোগ করতে সহজ হয়।

ASP.NET Core-এ Routing একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান যা অ্যাপ্লিকেশন নেভিগেশন ও কন্ট্রোলারের কার্যকলাপ নির্ধারণে সহায়ক। এর মাধ্যমে URL প্যাটার্ন, কনস্ট্রেইন্ট, এবং প্যারামিটার ব্যবহারের মাধ্যমে আরও কার্যকরী, ফ্লেক্সিবল এবং শক্তিশালী ওয়েব অ্যাপ্লিকেশন তৈরি করা সম্ভব।

common.content_added_by

Attribute Routing এবং Convention-based Routing

237
237

ASP.NET Core-এ Routing একটি গুরুত্বপূর্ণ বিষয়, যা অ্যাপ্লিকেশনের ক্লায়েন্টের রিকোয়েস্টকে নির্দিষ্ট Controller Action-এ ম্যাপ করে। ASP.NET Core-এ রাউটিং করতে দুই ধরনের পদ্ধতি ব্যবহৃত হয়:

  • Convention-based Routing
  • Attribute Routing

Convention-based Routing

ধারণা

Convention-based Routing একটি centrally defined routing pattern ব্যবহার করে রিকোয়েস্টকে ম্যাপ করে। এটি সাধারণত Startup.cs ফাইলের মধ্যে UseEndpoints বা MapControllerRoute পদ্ধতির মাধ্যমে কনফিগার করা হয়।

ব্যবহার

এই পদ্ধতিতে রাউটিং প্যাটার্ন ডিফাইন করা হয় এবং সমস্ত রিকোয়েস্ট সেই প্যাটার্ন অনুসারে রুট হয়।

উদাহরণ:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

ব্যাখ্যা:

  • controller=Home: যদি রিকোয়েস্টে কোন নির্দিষ্ট কন্ট্রোলার উল্লেখ না থাকে, তাহলে ডিফল্ট কন্ট্রোলার হবে HomeController
  • action=Index: যদি কোন নির্দিষ্ট অ্যাকশন উল্লেখ না থাকে, তাহলে ডিফল্ট অ্যাকশন হবে Index
  • id?: এই অংশটি ঐচ্ছিক (? নির্দেশ করে)।

সুবিধা:

  • সহজ এবং দ্রুত কনফিগার করা যায়।
  • সব রাউটিং একটি কেন্দ্রীয় স্থানে সংজ্ঞায়িত হয়।
  • ছোট এবং সাধারণ অ্যাপ্লিকেশনের জন্য কার্যকর।

সীমাবদ্ধতা:

  • জটিল অ্যাপ্লিকেশনের জন্য অনুপযুক্ত।
  • Controller এবং Action-এর মধ্যে বেশি নিয়ন্ত্রণ প্রয়োজন হলে কার্যকর নয়।

Attribute Routing

ধারণা

Attribute Routing একটি declarative approach ব্যবহার করে, যেখানে রাউটিং প্যাটার্ন সরাসরি Controller এবং Action Method-এ সংজ্ঞায়িত হয়। এটি কন্ট্রোলারের নির্দিষ্ট পাথ এবং প্যারামিটার নিয়ন্ত্রণের জন্য ব্যবহার করা হয়।

ব্যবহার

Attribute Routing করতে Route অ্যাট্রিবিউট ব্যবহার করা হয়। এটি প্রতিটি Controller বা Action Method-এর উপরে ডিক্লেয়ার করা হয়।

উদাহরণ:

Controller-এর স্তরে Attribute Routing:

[Route("products")]
public class ProductController : Controller
{
    [Route("")]
    public IActionResult Index()
    {
        return View();
    }

    [Route("details/{id}")]
    public IActionResult Details(int id)
    {
        return View();
    }
}

ব্যাখ্যা:

  • /products: Index অ্যাকশন কল করবে।
  • /products/details/1: Details অ্যাকশন কল করবে যেখানে id=1

Action Method-এর স্তরে Attribute Routing:

public class ProductController : Controller
{
    [HttpGet("products/{id}")]
    public IActionResult GetProduct(int id)
    {
        return View();
    }

    [HttpPost("products/create")]
    public IActionResult CreateProduct(Product product)
    {
        return View();
    }
}

সুবিধা:

  • নির্দিষ্ট রাউটিং নিয়ন্ত্রণের জন্য কার্যকর।
  • প্রতিটি Controller এবং Action-এ প্যাটার্ন কাস্টমাইজ করা যায়।
  • জটিল অ্যাপ্লিকেশনে ব্যবহারের জন্য আদর্শ।
  • HTTP Method (GET, POST) সহ রাউটিং প্যাটার্ন নির্ধারণ করা যায়।

সীমাবদ্ধতা:

  • বড় অ্যাপ্লিকেশনে রাউটিং পরিচালনা করা জটিল হতে পারে।
  • Convention-based Routing-এর তুলনায় অনেক বেশি বিস্তারিত কনফিগারেশন প্রয়োজন।

Convention-based Routing বনাম Attribute Routing

বৈশিষ্ট্যConvention-based RoutingAttribute Routing
ডিফাইন করার পদ্ধতিStartup.cs-এ কেন্দ্রিয়ভাবে সংজ্ঞায়িত।সরাসরি Controller বা Action Method-এ।
নিয়ন্ত্রণের মাত্রাসীমিত, সাধারণ প্যাটার্নের জন্য।Controller এবং Action অনুযায়ী কাস্টম।
সহজতাসহজ এবং দ্রুত।জটিল এবং বিস্তারিত।
উপযুক্ততাসাধারণ অ্যাপ্লিকেশনের জন্য উপযুক্ত।জটিল অ্যাপ্লিকেশনের জন্য আদর্শ।
HTTP Method সমর্থনডিফল্টভাবে HTTP Method নির্দিষ্ট নয়।নির্দিষ্ট HTTP Method ব্যবহার করা যায়।

ASP.NET Core-এ রাউটিং সংমিশ্রণ

ASP.NET Core-এ Convention-based Routing এবং Attribute Routing একসঙ্গে ব্যবহার করা যায়। তবে জটিল অ্যাপ্লিকেশনের ক্ষেত্রে Attribute Routing বেশি কার্যকর, কারণ এটি নির্দিষ্ট নিয়ন্ত্রণ এবং কাস্টমাইজেশনের সুযোগ দেয়।

Routing ASP.NET Core-এ অ্যাপ্লিকেশন স্ট্রাকচার এবং ক্লায়েন্ট রিকোয়েস্ট পরিচালনার একটি অপরিহার্য অংশ। সঠিক রাউটিং প্যাটার্ন নির্বাচন অ্যাপ্লিকেশনের কার্যকারিতা এবং ব্যবস্থাপনা সহজ করে।

common.content_added_by

Middleware এর ভূমিকা এবং কাস্টম Middleware তৈরি করা

232
232

ASP.NET Core অ্যাপ্লিকেশন নির্মাণে Middleware একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। Middleware হলো সফটওয়্যারের কম্পোনেন্ট যেগুলি HTTP রিকোয়েস্ট এবং রেসপন্স পাইপলাইনে কাজ করে। ASP.NET Core এর Middleware সিস্টেম বিভিন্ন ধরনের কাজ সম্পাদন করতে ব্যবহৃত হয়, যেমন রিকোয়েস্ট লগিং, অথেন্টিকেশন, অথরাইজেশন, রিকোয়েস্ট বৈধকরণ (validation), এবং রেসপন্স ট্রান্সফর্মেশন।


Middleware এর ভূমিকা

Middleware অ্যাপ্লিকেশনের রিকোয়েস্ট এবং রেসপন্স প্রসেসিং এর জন্য একে অপরের সাথে যুক্ত হয়ে কাজ করে। এই প্রক্রিয়াটি রিকোয়েস্টের প্রথম গ্রহণ থেকে রেসপন্স ফেরত দেওয়ার শেষ পর্যন্ত চলে। একাধিক Middleware একের পর এক পাইপলাইনে কাজ করে, যেমন:

  1. রিকোয়েস্ট প্রসেসিং: Middleware প্রথমে রিকোয়েস্ট গ্রহণ করে এবং তা প্রয়োজনীয়ভাবে প্রসেস করে। উদাহরণস্বরূপ, লগিং, অথেন্টিকেশন চেকিং, বা কুকিজের যাচাই।
  2. রিকোয়েস্ট মডিফিকেশন: Middleware রিকোয়েস্টে কিছু পরিবর্তন করতে পারে, যেমন HTTP হেডারস বা বডি পরিবর্তন করা।
  3. রেসপন্স প্রক্রিয়া: Middleware রেসপন্স প্রদান করে যখন অ্যাকশন মেথডের কাজ সম্পন্ন হয় এবং রেসপন্স ক্লায়েন্টে ফেরত পাঠানো হয়। যেমন, রেসপন্স হেডার বা কনটেন্ট কাস্টমাইজ করা।
  4. কাস্টম লজিক: কিছু বিশেষ কাস্টম লজিকের প্রয়োগ হতে পারে, যেমন রিকোয়েস্টে কোনো নির্দিষ্ট কন্ডিশন চেক করা এবং রেসপন্স ফরম্যাটের উপর নির্ভর করে নির্দিষ্ট কাজ করা।

সাধারণ Middleware উদাহরণ:

  • Authentication Middleware: ইউজারের পরিচয় যাচাই করে।
  • Authorization Middleware: ইউজারের অ্যাক্সেস লেভেল চেক করে।
  • Logging Middleware: রিকোয়েস্টের লোগিং তৈরি করে।
  • Static Files Middleware: স্ট্যাটিক ফাইল যেমন CSS, JavaScript বা ছবি সার্ভ করে।
  • Exception Handling Middleware: অ্যাপ্লিকেশনের যে কোনো ভুল বা এক্সসেপশন হ্যান্ডেল করে এবং ব্যবহারকারীকে উপযুক্ত বার্তা দেখায়।

কাস্টম Middleware তৈরি করা

ASP.NET Core-এ কাস্টম Middleware তৈরি করা খুবই সহজ। এটি সাধারণত একটি ক্লাসের মাধ্যমে তৈরি করা হয় যা Invoke বা InvokeAsync মেথডের মাধ্যমে রিকোয়েস্ট প্রক্রিয়ায় হস্তক্ষেপ করে।

কাস্টম Middleware তৈরির জন্য ধাপসমূহ:

  1. Middleware ক্লাস তৈরি করুন: একটি ক্লাস তৈরি করুন যা Invoke বা InvokeAsync মেথডে রিকোয়েস্ট এবং রেসপন্স প্রসেসিংয়ের জন্য কোড লিখবে।
  2. Middleware ইন্সট্যান্স তৈরি করুন: স্টার্টআপ ক্লাসে Configure মেথডে এই কাস্টম Middleware যোগ করুন।

কাস্টম Middleware উদাহরণ

ধরা যাক, আপনি একটি কাস্টম Middleware তৈরি করতে চান যা রিকোয়েস্টের আগে কিছু লোগিং কাজ করবে এবং এরপর রেসপন্স ফেরত দেবে।

public class RequestLoggingMiddleware
{
    private readonly RequestDelegate _next;

    public RequestLoggingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // রিকোয়েস্টের তথ্য লগ করা
        Console.WriteLine($"Request Path: {context.Request.Path}");

        // পরবর্তী Middleware বা Request Handler কল করা
        await _next(context);

        // রেসপন্সের পরবর্তী তথ্য লগ করা
        Console.WriteLine($"Response Status Code: {context.Response.StatusCode}");
    }
}

Middleware পিপলাইনএ কাস্টম Middleware যোগ করা:

কাস্টম Middleware ব্যবহার করতে, স্টার্টআপ ক্লাসে Configure মেথডে এটি যোগ করতে হবে।

public class Startup
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        // কাস্টম Middleware যোগ করা
        app.UseMiddleware<RequestLoggingMiddleware>();

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    }
}

এখানে UseMiddleware<RequestLoggingMiddleware>() দ্বারা কাস্টম Middleware পিপলাইনে যুক্ত করা হয়েছে। এখন যখন কোনো রিকোয়েস্ট আসবে, Middleware রিকোয়েস্টের পথ এবং রেসপন্সের স্ট্যাটাস কোড লোগ করবে।


কাস্টম Middleware এর উন্নত ফিচার

ASP.NET Core Middleware আরো উন্নত করতে এবং কাস্টমাইজ করতে বেশ কিছু ফিচার ব্যবহার করা যেতে পারে, যেমন:

  • নির্দিষ্ট রিকোয়েস্ট চেক করা: Middleware কে নির্দিষ্ট URL বা HTTP মেথডের জন্য কনফিগার করা যেতে পারে।
  • পরবর্তী Middleware এ ডেটা পাঠানো: আপনি Middleware থেকে ডেটা ব্যবহারকারী রিকোয়েস্ট বা রেসপন্সে পাঠাতে পারেন।
  • Error Handling: কাস্টম Middleware-এ এক্সসেপশন হ্যান্ডলিং যুক্ত করা সম্ভব।

উদাহরণ: নির্দিষ্ট রিকোয়েস্টের জন্য Middleware প্রয়োগ করা

public class RequestLoggingMiddleware
{
    private readonly RequestDelegate _next;

    public RequestLoggingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // শুধুমাত্র নির্দিষ্ট পাথের জন্য লগিং
        if (context.Request.Path.StartsWithSegments("/api"))
        {
            Console.WriteLine($"API Request Path: {context.Request.Path}");
        }

        await _next(context);
    }
}

এটি শুধুমাত্র /api পাথের রিকোয়েস্টের জন্য লোগিং করবে।


উপসংহার

Middleware ASP.NET Core অ্যাপ্লিকেশনে খুবই গুরুত্বপূর্ণ উপাদান। এটি রিকোয়েস্ট এবং রেসপন্স প্রসেসিং-এর জন্য একে অপরের সাথে কাজ করে এবং বিভিন্ন ধরনের ফাংশনালিটি যোগ করে, যেমন লগিং, অথেন্টিকেশন, অথরাইজেশন, এবং এক্সসেপশন হ্যান্ডলিং। কাস্টম Middleware তৈরি করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে আরও কাস্টমাইজড এবং কার্যকরী করতে পারেন।

common.content_added_by

Built-in Middleware (e.g., Static Files, Authentication)

247
247

ASP.NET Core এর Middleware হলো সেই কম্পোনেন্টগুলো যা HTTP রিকোয়েস্ট এবং রেসপন্স প্রসেস করার জন্য ব্যবহৃত হয়। প্রতিটি Middleware একটি নির্দিষ্ট কাজ করে এবং তারা একে অপরের সঙ্গে কাজ করে যাতে পুরো অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করতে পারে। ASP.NET Core অনেক ধরনের বিল্ট-ইন Middleware প্রদান করে যা বিভিন্ন কাজের জন্য ব্যবহার করা হয়।

এখানে কিছু গুরুত্বপূর্ণ Built-in Middleware এর উদাহরণ দেওয়া হলো, যেমন Static Files এবং Authentication Middleware।


Static Files Middleware

Static Files Middleware হলো ASP.NET Core-এর একটি built-in Middleware যা স্ট্যাটিক ফাইল (যেমন CSS, JavaScript, ইমেজ, ফন্টস) সার্ভ করতে ব্যবহৃত হয়। এটি সাধারণত wwwroot ফোল্ডারের মধ্যে স্টোর করা ফাইলগুলিকে ওয়েব ব্রাউজারে সরাসরি পাঠায়।

Static Files Middleware কনফিগারেশন

ASP.NET Core অ্যাপ্লিকেশনটিতে wwwroot ফোল্ডারে স্ট্যাটিক ফাইল রাখতে হয়, এবং আপনি Startup.cs ফাইলে Static Files Middleware কনফিগার করতে পারেন।

Startup.cs ফাইলে Static Files Middleware কনফিগার করার উদাহরণ:

public class Startup
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Development environment এ error pages দেখানোর জন্য
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        // Static files middleware যোগ করা
        app.UseStaticFiles();

        // অন্যান্য middleware গুলি
        app.UseRouting();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

এখানে, app.UseStaticFiles(); স্ট্যাটিক ফাইল সার্ভ করার জন্য Middleware কে অ্যাকটিভেট করে। এখন, wwwroot ফোল্ডারের ভিতরে থাকা ফাইলগুলো ব্রাউজারে সরাসরি অ্যাক্সেস করা যাবে। যেমন:


Authentication Middleware

Authentication Middleware হলো ASP.NET Core-এর আরেকটি গুরুত্বপূর্ণ built-in Middleware যা অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীর পরিচয় যাচাই করতে ব্যবহৃত হয়। এটি Cookie Authentication, JWT Bearer Tokens, অথবা OAuth এর মতো প্রক্রিয়া ব্যবহার করতে পারে। Authentication Middleware অ্যাপ্লিকেশনের একাধিক জায়গায় ব্যবহারকারীর লগইন, সাইন-আপ এবং লগআউট প্রক্রিয়া পরিচালনা করে।

Authentication Middleware কনফিগারেশন

ASP.NET Core অ্যাপ্লিকেশনটিতে Authentication Middleware কনফিগার করার জন্য, আপনাকে Startup.cs ফাইলে যথাযথ সেটিংস কনফিগার করতে হবে। উদাহরণস্বরূপ, Cookie Authentication কনফিগারেশন করা যাক:

Startup.cs ফাইলে Cookie Authentication কনফিগার করার উদাহরণ:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Authentication service কনফিগার করা (cookie authentication)
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(options =>
                {
                    options.LoginPath = "/Account/Login"; // লগইন পাথ
                    options.AccessDeniedPath = "/Account/AccessDenied"; // অ্যাক্সেস ডিনাইড পাথ
                });

        // অন্যান্য সেবা কনফিগারেশন
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Development environment এ error pages দেখানোর জন্য
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        // Static files middleware
        app.UseStaticFiles();

        // Authentication middleware
        app.UseAuthentication();  // Authentication middleware কনফিগার করা

        // Authorization middleware
        app.UseAuthorization();

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

এখানে, app.UseAuthentication(); Authentication Middleware কে সক্রিয় করে, যা সমস্ত রিকোয়েস্টে ব্যবহারকারীর লগইন বা টোকেন যাচাই করবে।

Cookie Authentication কনফিগারেশন:

উপরের কনফিগারেশনে AddCookie ব্যবহার করা হয়েছে, যা কুকি বেসড Authentication প্রক্রিয়া ব্যবহারের জন্য। যখন ব্যবহারকারী লগইন করবেন, তখন একটি কুকি তৈরি হবে যা সার্ভারের সঙ্গে যোগাযোগ করে ব্যবহারকারীর সেশন চিহ্নিত করবে।


অন্যান্য Built-in Middleware উদাহরণ

ASP.NET Core আরও অনেক Built-in Middleware সরবরাহ করে, যা আপনাকে বিভিন্ন প্রয়োজনীয় কাজ করতে সাহায্য করে। এর মধ্যে কিছু গুরুত্বপূর্ণ Middleware হলো:

  • UseRouting(): রাউটিং এবং URL ম্যাপিং পরিচালনা করে।
  • UseAuthorization(): ব্যবহারকারীর অনুমতি যাচাই করে এবং প্রিভিলেজ অনুযায়ী অ্যাক্সেস কন্ট্রোল করে।
  • UseSession(): সেশন ডেটা পরিচালনা করে, যেমন ব্যবহারকারী তথ্য সংরক্ষণ।
  • UseHttpsRedirection(): HTTP রিকোয়েস্টকে HTTPS-এ রিডিরেক্ট করে, নিরাপত্তা বৃদ্ধি করার জন্য।
  • UseCors(): Cross-Origin Resource Sharing (CORS) কনফিগারেশন সাপোর্ট করে, যা API থেকে বিভিন্ন ডোমেইন থেকে অ্যাক্সেস নির্ধারণ করতে ব্যবহৃত হয়।

সারাংশ

ASP.NET Core তে Built-in Middleware গুলি সিস্টেমের বিভিন্ন অংশ যেমন স্ট্যাটিক ফাইল, Authentication, Routing, Authorization ইত্যাদি পরিচালনা করতে সাহায্য করে। Static Files Middleware স্ট্যাটিক ফাইল সার্ভ করার জন্য ব্যবহৃত হয়, এবং Authentication Middleware ব্যবহারকারীর লগইন এবং সেশন ম্যানেজমেন্ট পরিচালনা করে। ASP.NET Core-এর Middleware সিস্টেমটি অত্যন্ত ফ্লেক্সিবল এবং কাস্টম Middleware তৈরি করার সুযোগও প্রদান করে, যা আপনাকে আপনার অ্যাপ্লিকেশন প্রয়োজন অনুযায়ী কাস্টমাইজ করতে সহায়তা করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion