আজকের লেকচারে স্বাগতম!

কোথায় আছি আমরা? আপনি বর্তমানে Section 25: Identity-এর একটি বিশেষ টপিকে আছেন। আমাদের কোর্সের একদম শুরুতে আমরা Routing নিয়ে বিস্তারিত কাজ করেছিলাম, তবে সেটি ছিল Attribute Routing। আজকে আমরা শিখবো Conventional Routing কী, এটি কীভাবে কাজ করে এবং Attribute Routing-এর সাথে এর মূল পার্থক্য কোথায়। চলুন শুরু করি!


📝 Quick Summary for Revision

ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য পুরো লেকচারের মূল বিষয়গুলো নিচে লিস্ট করা হলো:

  • Two Types of Routing: ASP.NET Core-এ দুই ধরণের Routing সাপোর্ট করে—১. Attribute Routing, ২. Conventional Routing।
  • Attribute Routing: এটি সরাসরি Controller বা Action Method-এর ওপর [Route] অ্যাট্রিবিউট ব্যবহার করে লেখা হয়। এটি অনেক বেশি ফ্লেক্সিবল এবং আধুনিক প্রজেক্টের জন্য রিকমেন্ডেড।
  • Conventional Routing: এটি Program.cs ফাইলে গ্লোবালি ডিক্লেয়ার করা হয়। ছোট প্রজেক্ট যেখানে সব URL-এর স্ট্রাকচার একই রকম থাকে, সেখানে এটি ব্যবহার করা সহজ।
  • Route Pattern: Conventional Routing-এর ডিফল্ট প্যাটার্ন হলো {controller}/{action}/{id?}
  • Overriding: আপনি যদি গ্লোবালি Conventional Routing সেট করেন, কিন্তু কোনো একটি Controller-এ [Route] অ্যাট্রিবিউট ব্যবহার করেন, তবে Attribute Routing-ই প্রাধান্য পাবে (Override করবে)।
  • Industry Trend: Conventional Routing পুরোনো ASP.NET MVC-এর একটি ফিচার। বর্তমান ইন্ডাস্ট্রিতে প্রায় সব প্রোজেক্টেই Attribute Routing ব্যবহার করা হয়।

🧠 Comprehensive Breakdown

এখানে লেকচারের প্রতিটি বিষয় বিস্তারিতভাবে এবং ধাপে ধাপে ব্যাখ্যা করা হলো:

১. Attribute Routing vs Conventional Routing (Priority: 9/10)

Routing হলো ইউজারের রিকোয়েস্ট করা URL-এর ওপর ভিত্তি করে সঠিক Controller এবং Action Method খুঁজে বের করার প্রক্রিয়া।

  • Attribute Routing (The Modern Way): আমরা এত দিন [Route("[controller]/[action]")] লিখে এসেছি। এটি প্রতিটি Controller-এর জন্য আলাদা আলাদা এবং কাস্টম URL তৈরি করার সুবিধা দেয়। SEO (Search Engine Optimization) বা API ডেভেলপমেন্টের জন্য এটি বেস্ট চয়েস।
  • Conventional Routing (The Legacy Way): আপনি যদি চান যে আপনার পুরো প্রজেক্টের সব URL একটি নির্দিষ্ট নিয়ম বা টেমপ্লেট মেনে চলবে, তবে বারবার [Route] না লিখে গ্লোবালি Conventional Routing সেট করে দিতে পারেন। এটি ছোট অ্যাপ্লিকেশনের জন্য ভালো।

২. How to Setup Conventional Routing (Priority: 10/10)

Conventional Routing কনফিগার করতে হয় Program.cs ফাইলে, UseRouting() এবং UseEndpoints() এর সাহায্যে।

Why do this? যদি আপনার Account Controller-এ Login, Register, Logout ইত্যাদি অনেকগুলো Action Method থাকে এবং আপনি চান সবগুলোর URL স্ট্রাকচার Domain/Account/ActionName হোক, তখন গ্লোবাল প্যাটার্ন সেট করে দেওয়াই সহজ।

💻 Code Implementation (Program.cs - As shown in lecture):

app.UseRouting();
 
// Authentication এবং Authorization এর পর Endpoints ম্যাপ করা হয়
app.UseEndpoints(endpoints =>
{
    // Conventional Routing সেটআপ
    endpoints.MapControllerRoute(
        name: "default", // এই নাম শুধু ইন্টারনাল রেফারেন্সের জন্য
        pattern: "{controller}/{action}/{id?}" // এটি হলো গ্লোবাল রুট টেমপ্লেট
    );
});
 

৩. Understanding the Route Pattern (Priority: 10/10)

উপরের কোডে আমরা যে pattern: "{controller}/{action}/{id?}" লিখলাম, এর মানে কী?

  • {controller}: এটি ইউজার রিকোয়েস্টের প্রথম অংশকে Controller এর নাম হিসেবে ধরে নিবে (যেমন: URL-এ persons থাকলে এটি PersonsController খুঁজবে)।
  • {action}: এটি দ্বিতীয় অংশকে Action Method এর নাম হিসেবে ধরে নিবে (যেমন: URL-এ index থাকলে এটি Index() মেথড খুঁজবে)।
  • {id?}: এটি একটি Route Parameter। প্রশ্নবোধক চিহ্ন (?) থাকার মানে হলো এটি Optional। অর্থাৎ ইউজার URL-এ আইডি দিতেও পারে, নাও দিতে পারে। যেমন: persons/edit/1 দিলে id = 1 হিসেবে রিসিভ হবে।

৪. Overriding Conventional Routing (Priority: 8/10)

Conventional Routing গ্লোবালি কাজ করে ঠিকই, তবে এর চেয়ে Attribute Routing এর পাওয়ার বেশি। ধরুন, আপনি Program.cs-এ Conventional Routing চালু করেছেন। কিন্তু আপনার HomeController-এর ওপর আপনি [Route("MyHome")] লিখে রেখেছেন।

এক্ষেত্রে ASP.NET Core ওই নির্দিষ্ট কন্ট্রোলারের জন্য Conventional Routing ইগনোর করবে এবং আপনার কাস্টম Attribute Route কেই প্রায়োরিটি দিবে। লেকচারার এ কারণে Account Controller থেকে [Route] অ্যাট্রিবিউট মুছে দিয়ে বা কমেন্ট আউট করে Conventional Routing টেস্ট করে দেখিয়েছেন।


🌟 Best Practices & Modern Updates (.NET 10 Context)

  • Best Practice (The Absolute Rule): লেকচারার স্পষ্টভাবে বলেছেন এবং ইন্ডাস্ট্রির রুলসও তাই—সবসময় Attribute Routing ব্যবহার করবেন! Conventional Routing শুধুমাত্র থিওরিটিক্যাল নলেজ এবং পুরোনো লিগ্যাসি (Legacy) প্রজেক্ট মেইনটেইন করার জন্য জানা প্রয়োজন। বড় স্কেলের প্রজেক্টে Conventional Routing মেইনটেইন করা প্রায় অসম্ভব হয়ে যায়।
  • Route Constraints: আপনি Conventional Routing এর প্যাটার্নেও Constraints ব্যবহার করতে পারেন। যেমন: {id:int?} দিলে আইডি হিসেবে শুধুমাত্র নম্বর গ্রহণ করবে।

Modern Updates in .NET 10: লেকচারার app.UseEndpoints(...) ব্লকের ভেতরে MapControllerRoute দেখিয়েছেন, যা .NET 5/6 এর আগের স্টাইল। .NET 6 থেকে .NET 10 পর্যন্ত Program.cs অনেক ক্লিন হয়ে গেছে। এখন আর UseEndpoints ব্লক লেখার কোনো প্রয়োজন নেই। আপনি সরাসরি app বিল্ডারের ওপর রাউটিং ম্যাপ করতে পারেন।

.NET 10 Code Implementation:

var app = builder.Build();
 
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
 
// .NET 10-এ UseEndpoints ব্লকের দরকার নেই, সরাসরি এভাবে লেখা হয়:
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}"); // ডিফল্ট ভ্যালুও সেট করে দেওয়া যায়
 
app.Run();
 

পরবর্তী লেকচারে আমরা ইউজারদের Roles (যেমন: Admin, Normal User) তৈরি এবং অ্যাসাইন করা শিখবো!