مقدمه
به فصل بیست و یکم و دنیای توسعهی وب خوش آمدید! تا به اینجا، ما با اصول زبان C# و
فریمورک .NET در قالب اپلیکیشنهای کنسول آشنا شدهایم. اکنون زمان آن است که از این
دانش برای ساخت اپلیکیشنهای قدرتمند وب استفاده کنیم. ابزار اصلی ما برای این کار،
ASP.NET Core خواهد بود. ASP.NET Core نسخهی بازطراحی شده،
مدرن، سبک، سریع، چندپلتفرمی (cross-platform) و متنباز (open-source) فریمورک ASP.NET
است که توسط مایکروسافت و جامعهی .NET توسعه داده میشود.
این فریمورک به ما اجازه میدهد تا انواع مختلفی از اپلیکیشنهای تحت وب را بسازیم، از وبسایتهای
سنتی و وبلاگها گرفته تا وبسرویسهای RESTful که توسط اپلیکیشنهای موبایل و
کلاینتهای دیگر مصرف میشوند. در این درس، با مفاهیم بنیادی و معماری ASP.NET Core آشنا
خواهیم شد.
ASP.NET Core چیست؟
ASP.NET Core یک فریمورک یکپارچه برای ساخت اپلیکیشنهای وب است. برخلاف نسخهی
قدیمیتر ASP.NET که گزینههایی مانند Web Forms، MVC و Web API را به صورت
تکنولوژیهای تقریباً مجزا ارائه میداد، ASP.NET Core تمام این قابلیتها را در یک مدل
برنامهنویسی واحد و منسجم ترکیب کرده است.
ویژگیهای کلیدی
- چندپلتفرمی: اپلیکیشنهای ASP.NET Core میتوانند بر روی ویندوز،
لینوکس و macOS توسعه داده شده و اجرا شوند.
- کارایی بالا: این فریمورک از ابتدا برای ارائهی حداکثر کارایی طراحی شده و
یکی از سریعترین فریمورکهای وب در بنچمارکهای صنعتی است.
- متنباز: کد منبع ASP.NET Core در گیتهاب موجود است و توسط
جامعهی برنامهنویسان به صورت فعال توسعه داده میشود.
- یکپارچگی با ابزارهای مدرن: به خوبی با ابزارها و تکنولوژیهای مدرن توسعهی
وب مانند کانتینرها (Docker)، معماری میکروسرویس و پلتفرمهای ابری (Azure, AWS, Google Cloud)
کار میکند.
- سیستم تزریق وابستگی (Dependency Injection) داخلی: این فریمورک یک سیستم
داخلی و قدرتمند برای مدیریت وابستگیها دارد که نوشتن کدهای ماژولار و قابل تست را ساده
میکند.
معماری و خط لولهی درخواست
در قلب هر اپلیکیشن ASP.NET Core، یک خط لولهی پردازش درخواست (request
processing pipeline) قرار دارد. وقتی یک درخواست HTTP از مرورگر کاربر به
سرور میرسد، این درخواست وارد این خط لوله شده و از مجموعهای از اجزا به نام میانافزار
(Middleware) عبور میکند.
هر قطعه از میانافزار، یک وظیفهی مشخص را بر روی درخواست انجام میدهد. برای مثال:
- یک میانافزار ممکن است درخواست را برای احراز هویت بررسی کند.
- میانافزار دیگری ممکن است خطاهای رخ داده را مدیریت کند.
- یک میانافزار میتواند فایلهای استاتیک (مانند تصاویر، CSS یا جاوااسکریپت) را به کاربر تحویل
دهد.
- و در نهایت، یک میانافزار مسئول پیدا کردن و اجرای منطق اصلی برنامه (مانند یک کنترلر
MVC یا یک صفحهی Razor) است.
این خط لوله در فایل Program.cs (در .NET 6 و بالاتر) یا
کلاس Startup.cs (در نسخههای قدیمیتر) پیکربندی میشود.
Program.cs (Simplified .NET 8)
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapGet("/", () => "Hello World!");
app.Run();
در این کد، هر فراخوانی به app.Use... در حال اضافه کردن یک قطعهی میانافزار به خط لوله است.
ترتیب این فراخوانیها بسیار مهم است، زیرا درخواست به همان ترتیبی که میانافزارها اضافه شدهاند،
از آنها عبور میکند.
مدلهای برنامهنویسی در ASP.NET Core
ASP.NET Core چندین مدل مختلف را برای ساخت اپلیکیشنهای وب ارائه میدهد که شما
میتوانید بسته به نیاز خود، یکی از آنها را انتخاب کنید:
- ASP.NET Core MVC: یک فریمورک کامل بر اساس الگوی طراحی معروف
Model-View-Controller. این الگو برای ساخت اپلیکیشنهای وب پیچیده
با جداسازی واضح بین منطق داده (Model)، نمایش (View) و کنترل جریان (Controller) ایدهآل است.
- Razor Pages: یک مدل صفحهمحور (page-centric) که نوشتن
وبسایتهای سادهتر را آسان میکند. در این مدل، هر صفحه (یک فایل .cshtml) منطق و نمایش
مربوط به خود را در کنار هم دارد. این روش برای شروع کار با توسعهی وب در ASP.NET
Core بسیار مناسب است.
- Web API: برای ساخت وبسرویسهای HTTP که دادهها را
(معمولاً در فرمت JSON) به کلاینتهای مختلف مانند اپلیکیشنهای تکصفحهای (SPAs)
یا اپهای موبایل ارائه میدهند.
- Blazor: یک فریمورک مدرن برای ساخت رابطهای کاربری وب تعاملی با
استفاده از C# به جای جاوااسکریپت. Blazor به شما اجازه میدهد تا کدهای
C# خود را مستقیماً در مرورگر کاربر (با استفاده از WebAssembly) یا بر روی سرور
اجرا کنید.
در درسهای آیندهی این فصل، ما بر روی ساخت یک وبسایت ساده با استفاده از Razor Pages
و سپس ساخت یک Web API تمرکز خواهیم کرد.