تفاوت C#، .NET و ASP.NET Core چیست؟
مبینا اسبقی
1405/07/09
تفاوت C#، .NET و ASP.NET Core چیست؟
اگه تازه برنامهنویسی رو شروع کرده باشی یا بخوای وارد دنیای توسعه Backend بشی، احتمالاً اسم C#، .NET و ASP.NET Core رو زیاد شنیدی. اما تفاوتشون چیه؟ آیا هر سه زبان برنامهنویسی هستن؟ برای ساخت یک سایت یا Web API باید کدوم رو یاد بگیری؟
C# یک زبان برنامهنویسیه، .NET پلتفرمی برای ساخت و اجرای نرمافزاره و ASP.NET Core فریمورکیه که امکانات توسعه وب رو روی .NET فراهم میکنه.
این سه فناوری رقیب هم نیستن؛ هرکدوم مسئولیت متفاوتی دارن و میتونن در یک پروژه کنار هم استفاده بشن.
برای اینکه تفاوتشون رو فقط حفظ نکنی، توی این مقاله یک فروشگاه اینترنتی ساده رو مثال میزنیم. ابتدا با C# مبلغ سفارش مشتری رو محاسبه میکنیم. بعد با ASP.NET Core یک Web API میسازیم که مشتری بتونه تعداد سفارش رو از طریق مرورگر ارسال کنه و مبلغ نهایی رو دریافت کنه.
در پایان، دو برنامه کوچک خواهی داشت، نقش هر فناوری رو در یک پروژه میشناسی و میدونی برای ورود به برنامهنویسی Backend چه مسیری رو باید دنبال کنی.
تفاوت C#، .NET و ASP.NET Core در یک نگاه
برای درک تفاوت این سه فناوری، اول باید بدونی هرکدوم چه مسئلهای رو حل میکنن.
| فناوری | چی هست؟ | وظیفه در فروشگاه اینترنتی |
|---|---|---|
| C# | زبان برنامهنویسی | نوشتن منطق محاسبه قیمت و سفارش |
| .NET | پلتفرم توسعه نرمافزار | فراهمکردن ابزارها، کتابخانهها و زیرساخت اجرای برنامه |
| ASP.NET Core | فریمورک توسعه وب | دریافت درخواست مشتری و ارسال پاسخ از طریق HTTP |
فرض کن مشتری سه عدد ماوس سفارش داده و قیمت هر ماوس ۵۰۰ هزار تومنه.
با C# کدی مینویسی که قیمت هر ماوس رو در تعداد سفارش ضرب کنه. با امکانات .NET پروژه رو میسازی و اجرا میکنی. حالا اگه بخوای مشتری از طریق مرورگر یا اپلیکیشن موبایل تعداد سفارش رو ارسال کنه و مبلغ نهایی رو دریافت کنه، ASP.NET Core امکانات لازم برای این ارتباط رو فراهم میکنه.
نکته مهم اینه که هر برنامهای که با C# نوشته میشه، الزاماً به ASP.NET Core نیاز نداره. مثلاً برای ساخت یک برنامه ساده محاسبه قیمت که روی کامپیوتر اجرا میشه، C# و .NET کافی هستن.
رابطه C#، .NET و ASP.NET Core چیست؟
C#، .NET و ASP.NET Core سه فناوری مکمل هستن که هرکدوم در بخشی از فرایند توسعه نرمافزار نقش دارن.
در فروشگاه اینترنتی ما، منطق محاسبه مبلغ سفارش با C# نوشته میشه. .NET ابزارهای ساخت و زیرساخت اجرای برنامه رو فراهم میکنه و ASP.NET Core ارتباط بین مشتری و Backend رو مدیریت میکنه.
برای مثال، وقتی مشتری از طریق مرورگر تعداد سه ماوس رو درخواست میکنه، این اتفاقها میافتن:
- مرورگر یک درخواست HTTP به Backend فروشگاه ارسال میکنه.
- ASP.NET Core درخواست رو دریافت میکنه و به Endpoint مناسب میرسونه.
- کدی که با C# نوشتیم، قیمت هر ماوس رو از اطلاعات سمت سرور دریافت و مبلغ سفارش رو محاسبه میکنه.
- برنامه روی زیرساخت .NET اجرا میشه و ASP.NET Core نتیجه رو در قالب JSON به مرورگر برمیگردونه.
آیا همیشه باید از هر سه فناوری استفاده کنیم؟
نه؛ نوع برنامه مشخص میکنه به چه ابزارهایی نیاز داری.
اگه میخوای یک برنامه Console یا بسیاری از نرمافزارهای دسکتاپ رو بسازی، ممکنه اصلاً به ASP.NET Core احتیاج نداشته باشی.
اما اگه هدفت توسعه Backend یک فروشگاه اینترنتی با فناوریهای مایکروسافته، یادگیری C#، مفاهیم اصلی .NET و ASP.NET Core مسیر مرتبطیه.
خود .NET هم فقط مخصوص C# نیست و از زبانهای دیگهای مثل F# و Visual Basic پشتیبانی میکنه.
C# چیست و چه کاربردی دارد؟
C# یا سیشارپ یک زبان برنامهنویسی چندمنظوره است که با اون میتونی منطق و رفتار نرمافزار رو تعریف کنی.
با C# مشخص میکنی برنامه چه اطلاعاتی دریافت کنه، چه محاسباتی انجام بده، چه تصمیمهایی بگیره و در شرایط مختلف چه رفتاری داشته باشه.
برای مثال، در یک فروشگاه اینترنتی میتونی با C# قیمت محصولات رو محاسبه کنی، موجودی کالا رو بررسی کنی، قوانین تخفیف رو بنویسی یا منطق ثبت سفارش رو پیادهسازی کنی.
اولین برنامه C#: محاسبه مبلغ سفارش
برای شروع، یک برنامه Console میسازیم که مبلغ سفارش مشتری رو محاسبه کنه.
برنامه Console نوع سادهای از نرمافزاره که میتونه ورودی دریافت کنه و خروجی رو داخل ترمینال نمایش بده. این نوع برنامه برای یادگیری اولیه C# و منطق برنامهنویسی مناسبه.
مسئله ما: قیمت هر ماوس ۵۰۰ هزار تومنه و مشتری سه عدد سفارش داده. میخوایم مبلغ کل سفارش رو حساب کنیم.
برای اجرای این تمرین، به .NET 10 SDK و یک ویرایشگر مناسب مثل Visual Studio یا Visual Studio Code نیاز داری.
بعد از نصب SDK، ترمینال رو باز کن و دستورهای زیر رو اجرا کن:
dotnet --version
dotnet new console -n PriceCalculator -f net10.0
cd PriceCalculatorدستور اول نسخه SDK فعال رو نمایش میده. دستور دوم یک پروژه Console ایجاد میکنه و دستور سوم وارد پوشه پروژه میشه.
حالا فایل Program.cs رو باز کن و کد زیر رو جایگزین محتوای قبلی کن.
فایل PriceCalculator/Program.cs:
decimal unitPrice = 500000m;
int quantity = 3;
decimal total = CalculateTotal(unitPrice, quantity);
Console.WriteLine($"Total: {total}");
static decimal CalculateTotal(decimal price, int quantity)
{
return price * quantity;
}در این برنامه، متغیر unitPrice قیمت هر ماوس و متغیر quantity تعداد سفارش رو نگهداری میکنه.
متد CalculateTotal قیمت و تعداد رو دریافت میکنه و مبلغ کل رو به دست میاره. در پایان، Console.WriteLine نتیجه رو نمایش میده.
برای قیمت از نوع داده decimal استفاده کردیم، چون برای بسیاری از محاسبات دهدهی، از جمله مبالغ مالی، مناسبه.
برای ساخت و اجرای پروژه، داخل پوشه PriceCalculator دستورهای زیر رو اجرا کن:
dotnet build
dotnet runخروجی مورد انتظار:
Total: 1500000در این مثال، منطق محاسبه رو با C# نوشتیم، اما برای ساخت و اجرای برنامه از ابزارها و زیرساخت .NET استفاده کردیم.
چرا منطق محاسبه رو داخل یک متد نوشتیم؟
ممکنه بپرسی چرا بهجای نوشتن مستقیم unitPrice * quantity، یک متد جداگانه ساختیم؟
چون وقتی یک کار مشخص رو داخل متد قرار میدیم، میتونیم همون منطق رو در بخشهای مختلف برنامه فراخوانی کنیم.
برای مثال، منطق محاسبه مبلغ سفارش میتونه در یک برنامه Console، برنامه دسکتاپ یا Backend فروشگاه استفاده بشه.
در تمرین بعدی نیز همین ساختار محاسبه رو داخل یک Web API به کار میبریم تا تفاوت اجرای یک منطق در دو نوع برنامه رو ببینی.
آیا C# فقط برای طراحی سایت استفاده میشه؟
خیر. C# فقط مخصوص برنامهنویسی وب نیست.
با این زبان و فناوریهای مناسب میتونی برنامههای Console، نرمافزارهای دسکتاپ، سرویسهای تحت وب و بعضی از برنامههای موبایل رو توسعه بدی.
انتخاب ابزار و فریمورک به نوع نرمافزاری بستگی داره که قصد ساختنش رو داری.
.NET چیست و چه امکاناتی دارد؟
.NET یک پلتفرم رایگان، متنباز و چندسکویی برای توسعه نرمافزاره که ابزارها، کتابخانهها و زیرساخت لازم برای ساخت و اجرای برنامه رو فراهم میکنه.
در مثال قبلی، منطق محاسبه قیمت رو با C# نوشتیم؛ اما ایجاد پروژه، کامپایل کد و اجرای برنامه به امکانات .NET متکی بود.
برای شناخت این پلتفرم، چهار مفهوم مهم رو بررسی میکنیم: SDK، Runtime، کتابخانهها و CLR.
.NET SDK چیست؟
SDK مخفف Software Development Kit و به معنی مجموعه ابزارهای توسعه نرمافزاره.
برنامهنویس برای ایجاد پروژه، کامپایل کدها، مدیریت بستهها و تهیه خروجی برنامه از ابزارهای .NET SDK استفاده میکنه.
مثلاً برای ایجاد پروژه Console از این دستور استفاده کردیم:
dotnet new console -n PriceCalculator -f net10.0برای مشاهده نسخههای SDK نصبشده روی سیستم نیز میتونی دستور زیر رو اجرا کنی:
dotnet --list-sdksبرای اجرای تمرینهای این مقاله به .NET 10 SDK نیاز داری.
تفاوت .NET SDK و Runtime چیست؟
SDK ابزارهای ساخت و توسعه برنامه رو فراهم میکنه؛ Runtime زیرساخت لازم برای اجرای برنامه ساختهشده است.
وقتی SDK رو نصب میکنی، Runtimeهای مرتبط نیز معمولاً همراهش نصب میشن. اما برای اجرای یک برنامه منتشرشده، همیشه نیازی به نصب کامل SDK نیست.
در روش انتشار Framework-dependent، محیط مقصد باید Runtime سازگار رو داشته باشه. برای برنامههای تحت وب هم باید Runtime مناسب ASP.NET Core در دسترس باشه.
در مقابل، روش Self-contained این امکان رو فراهم میکنه که Runtime موردنیاز همراه برنامه منتشر بشه.
این دو روش از نظر حجم خروجی، الزامات سیستم مقصد و شیوه نگهداشت تفاوت دارن.
برای مطالعه بیشتر، مستندات رسمی انتشار برنامههای .NET رو ببین.
کتابخانههای .NET چه کاربردی دارن؟
کتابخانهها مجموعهای از امکانات آماده هستن که کمک میکنن کارهای متداول رو بدون نوشتن همه چیز از صفر انجام بدی.
مثلاً برای نگهداری مجموعهای از محصولات میتونی از List<T> استفاده کنی:
List<string> products = new()
{
"Laptop",
"Mouse",
"Keyboard"
};این کد با C# نوشته شده، اما List<T> از امکانات کتابخانههای .NET است.
کتابخانههای .NET امکانات مختلفی برای کار با مجموعه دادهها، فایلها، متن، تاریخ و زمان و شبکه فراهم میکنن.
CLR چیست و چه ارتباطی با Runtime دارد؟
CLR مخفف Common Language Runtime و یکی از اجزای اصلی محیط اجرای کدهای مدیریتشده در .NET است.
وقتی برنامه C# رو به روش معمول کامپایل میکنی، کد ابتدا به زبان میانی IL تبدیل میشه.
در زمان اجرا، کامپایلر JIT میتونه این کد میانی رو به دستورهای قابل اجرای پردازنده تبدیل کنه.
CLR همچنین در کارهایی مثل مدیریت حافظه و اجرای کد نقش داره.
البته JIT تنها روش اجرای برنامههای .NET نیست و روشهایی مثل Native AOT هم وجود دارن.
برای شروع برنامهنویسی لازم نیست تمام جزئیات IL و JIT رو یاد بگیری. فعلاً کافیه بدونی CLR بخشی از زیرساخت Runtime است.
برای مطالعه تخصصیتر میتونی به معرفی رسمی پلتفرم .NET در مستندات مایکروسافت مراجعه کنی.
ASP.NET Core چیست و چه کاربردی دارد؟
ASP.NET Core یک فریمورک متنباز و چندسکویی برای توسعه برنامههای تحت وب و Web API روی پلتفرم .NET است.
تا اینجا یک برنامه Console ساختیم که مبلغ سفارش رو محاسبه میکنه. اما مشتری نمیتونه با بازکردن یک آدرس اینترنتی، مستقیماً به برنامه Console ما درخواست HTTP ارسال کنه و مبلغ سفارش رو دریافت کنه.
برای ساخت Backend فروشگاه، به امکاناتی نیاز داریم که درخواست مشتری رو دریافت کنه، کد مناسب رو اجرا کنه و پاسخ رو به درخواستکننده برگردونه.
ASP.NET Core این امکانات رو فراهم میکنه.
ASP.NET Core چه امکاناتی برای توسعه وب فراهم میکنه؟
ASP.NET Core امکانات مختلفی مثل Routing، Middleware، مدیریت درخواست و پاسخ HTTP، تزریق وابستگیها، تنظیمات برنامه و احراز هویت رو در اختیار توسعهدهنده قرار میده.
مثلاً میتونی مشخص کنی وقتی یک درخواست GET به مسیر /orders/total ارسال شد، برنامه تعداد سفارش رو دریافت کنه، مبلغ کل رو محاسبه کنه و نتیجه رو بهصورت JSON برگردونه.
به بخشی از برنامه که برای رسیدگی به یک درخواست تعریف میشه، Endpoint میگیم.
فرایند پیداکردن Endpoint مناسب برای درخواست هم Routing نام داره.
تفاوت Web API، MVC و Minimal APIs چیست؟
این اصطلاحات در توسعه ASP.NET Core زیاد استفاده میشن، اما معنای یکسانی ندارن.
| مفهوم | توضیح | نمونه کاربرد |
|---|---|---|
| Web API | رابطی برای ارتباط برنامهها از طریق وب | دریافت محصولات یا ثبت سفارش از اپلیکیشن |
| ASP.NET Core MVC | روشی برای سازماندهی برنامه بر اساس Model، View و Controller | ساخت برنامه وب با صفحات HTML رندرشده در سمت سرور |
| Minimal APIs | روشی برای تعریف Endpointهای HTTP با کد و تنظیمات اولیه کمتر | ساخت یک Web API ساده |
در ASP.NET Core میتونی Web API رو با Minimal APIs یا Controller-based APIs پیادهسازی کنی.
برای اولین تمرین، از Minimal APIs استفاده میکنیم تا بدون درگیرشدن با ساختار چندین فایل، ارتباط بین درخواست HTTP و منطق C# رو یاد بگیری.
این انتخاب به معنی نامناسببودن Controllerها برای پروژههای واقعی نیست؛ انتخاب روش به نیاز پروژه، پیچیدگی برنامه و ساختار تیم بستگی داره.
ساخت اولین Web API با C# و ASP.NET Core
حالا میخوایم منطق محاسبه سفارش رو از محیط Console به یک Web API تبدیل کنیم.
در برنامه قبلی، قیمت و تعداد رو داخل کد مشخص کردیم و نتیجه رو در ترمینال دیدیم.
این بار میخوایم مشتری تعداد ماوسها رو از طریق مرورگر ارسال کنه و مبلغ نهایی رو در قالب JSON دریافت کنه.
برای اینکه مثال به منطق واقعی فروشگاه نزدیکتر باشه، قیمت محصول رو در سمت سرور نگهداری میکنیم و فقط تعداد سفارش رو از مشتری میگیریم.
این تفاوت مهمیه؛ چون در یک فروشگاه واقعی نباید قیمت اعلامشده توسط مشتری مبنای قابل اعتماد محاسبه مبلغ سفارش باشه.
مشخصات پروژه
| مشخصه | مقدار |
|---|---|
| نام پروژه | SampleStore |
| فناوری | ASP.NET Core روی .NET 10 |
| روش ساخت API | Minimal APIs |
| فایل اصلی | Program.cs |
| مسیر درخواست | GET /orders/total |
| ورودی | تعداد سفارش از Query String |
| خروجی | قیمت واحد، تعداد و مبلغ کل در قالب JSON |
برای این مثال به دیتابیس یا نصب بسته NuGet اضافی نیاز نداریم.
مرحله اول: ایجاد پروژه ASP.NET Core
ترمینال رو باز کن و دستورهای زیر رو اجرا کن:
dotnet new web -n SampleStore -f net10.0
cd SampleStoreدستور اول یک پروژه ساده ASP.NET Core ایجاد میکنه و دستور دوم وارد پوشه اون میشه.
مرحله دوم: نوشتن کد Web API
فایل Program.cs رو باز کن و محتوای اون رو با کد زیر جایگزین کن.
فایل SampleStore/Program.cs:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/orders/total", (int quantity) =>
{
if (quantity < 1 || quantity > 100)
{
return Results.BadRequest(new
{
Error = "Quantity must be between 1 and 100."
});
}
decimal unitPrice = 500000m;
decimal total = CalculateTotal(unitPrice, quantity);
return Results.Ok(new
{
UnitPrice = unitPrice,
Quantity = quantity,
Total = total
});
});
app.Run();
static decimal CalculateTotal(decimal price, int quantity)
{
return price * quantity;
}این برنامه یک Endpoint برای محاسبه مبلغ سفارش ایجاد میکنه.
بیایم بخشهای مهم کد رو بررسی کنیم.
WebApplication.CreateBuilder(args) تنظیمات و امکانات اولیه برنامه تحت وب رو آماده میکنه.
builder.Build() شیء برنامه رو میسازه.
با app.MapGet() مشخص میکنیم وقتی یک درخواست GET به مسیر /orders/total رسید، کد مربوط به محاسبه سفارش اجرا بشه.
پارامتر quantity تعداد سفارش رو دریافت میکنه. این پارامتر در مثال ما از Query String قابل دریافت است.
قبل از محاسبه، بررسی میکنیم تعداد سفارش بین ۱ تا ۱۰۰ باشه.
اگر تعداد معتبر نباشه، برنامه با Results.BadRequest() پاسخ 400 Bad Request برمیگردونه.
قیمت هر ماوس با متغیر unitPrice در سمت سرور تعریف شده. بعد متد CalculateTotal مبلغ سفارش رو محاسبه میکنه و Results.Ok() اطلاعات رو در قالب JSON برمیگردونه.
در پایان، app.Run() برنامه رو اجرا میکنه تا آماده دریافت درخواستها بشه.
چرا قیمت رو از مشتری دریافت نکردیم؟
فرض کن قیمت واقعی هر ماوس ۵۰۰ هزار تومنه، اما مشتری بتونه هنگام ارسال درخواست قیمت رو به ۵ هزار تومان تغییر بده.
اگر برنامه بدون بررسی به قیمت دریافتی اعتماد کنه، ممکنه مبلغ سفارش اشتباه محاسبه بشه.
برای جلوگیری از این مشکل، در مثال ما قیمت در سمت سرور تعریف شده و مشتری فقط تعداد رو ارسال میکنه.
البته در فروشگاه واقعی، قیمت معمولاً باید از اطلاعات معتبر محصول در دیتابیس یا سرویس مربوط دریافت بشه.
قوانین تخفیف، موجودی کالا و قیمت نهایی هم باید در سمت سرور بررسی بشن.
مرحله سوم: ساخت و اجرای پروژه
داخل پوشه SampleStore ابتدا دستور زیر رو اجرا کن:
dotnet buildسپس برنامه رو با این دستور اجرا کن:
dotnet run --no-launch-profile --urls http://localhost:5080پورت ۵۰۸۰ رو برای قابل پیشبینیبودن آدرس تمرین انتخاب کردیم.
گزینه --no-launch-profile مانع از اعمال تنظیمات پروفایل اجرای پروژه میشه.
اگر پورت ۵۰۸۰ در حال استفاده است، میتونی یک پورت آزاد دیگه انتخاب کنی.
نکته امنیتی: استفاده از HTTP در این مثال فقط برای اجرای محلیه. برای انتشار برنامه واقعی باید HTTPS و سایر تنظیمات امنیتی مناسب رو در نظر بگیری.
مرحله چهارم: مشاهده خروجی در مرورگر
مرورگر رو باز کن و این آدرس رو وارد کن:
http://localhost:5080/orders/total?quantity=3در این آدرس، quantity=3 یک پارامتر Query String است که تعداد سفارش رو مشخص میکنه.
ASP.NET Core درخواست رو دریافت میکنه، تعداد رو به Endpoint میرسونه و کد C# مبلغ سفارش رو محاسبه میکنه.
خروجی مورد انتظار:
{
"unitPrice": 500000,
"quantity": 3,
"total": 1500000
}در این مثال، پاسخ موفق باید وضعیت HTTP برابر 200 OK داشته باشه.
JSON هم یک قالب متنی برای تبادل اطلاعات بین برنامههاست.
مرحله پنجم: آزمایش پاسخهای موفق و نامعتبر
برای اینکه علاوه بر خروجی JSON، وضعیت HTTP و هدرهای پاسخ رو هم ببینی، میتونی از دستور curl استفاده کنی.
ابتدا درخواست معتبر رو آزمایش کن:
curl -i "http://localhost:5080/orders/total?quantity=3"در صورت اجرای صحیح برنامه، باید وضعیت 200 OK و اطلاعات سفارش رو دریافت کنی.
حالا یک درخواست نامعتبر بفرست:
curl -i "http://localhost:5080/orders/total?quantity=0"چون تعداد سفارش صفره، باید وضعیت 400 Bad Request و پیام زیر رو دریافت کنی:
{
"error": "Quantity must be between 1 and 100."
}درخواست با تعداد ۱۰۱ هم باید توسط شرط اعتبارسنجی رد بشه.
اگر پارامتر quantity رو حذف کنی یا بهجای عدد مقدار متنی نامعتبر بفرستی، قابلیت اتصال پارامترها در ASP.NET Core نیز میتونه پاسخ 400 Bad Request ایجاد کنه.
نقش C#، .NET و ASP.NET Core در این پروژه کجاست؟
حالا که Web API رو ساختیم، نقش هر فناوری رو در همین مثال مشخص کنیم.
| فناوری | کاری که در پروژه انجام داد |
|---|---|
| C# | نوشتن منطق محاسبه، شرط اعتبارسنجی و کد Endpoint |
| .NET SDK | ایجاد و ساخت پروژه |
| .NET Runtime | فراهمکردن زیرساخت اجرای برنامه |
| ASP.NET Core | دریافت درخواست HTTP، اتصال پارامترها و ارسال پاسخ |
متد CalculateTotal همون منطقیه که در برنامه Console نوشتیم؛ یعنی منطق محاسبه به محیط وب وابسته نیست.
در این تمرین، متد در هر دو پروژه جداگانه نوشته شده. در پروژههای بزرگتر میتونی منطق مشترک رو در یک کتابخانه مستقل قرار بدی و از اون در چند برنامه استفاده کنی.
تمرین مستقل: مبلغ سفارش رو تغییر بده
این بار بدون تغییر کد برنامه، مقدار تعداد سفارش رو از داخل آدرس تغییر بده:
http://localhost:5080/orders/total?quantity=4خروجی مورد انتظار:
{
"unitPrice": 500000,
"quantity": 4,
"total": 2000000
}معیار موفقیت اینه که پاسخ وضعیت 200 OK داشته باشه و مبلغ کل دو میلیون تومان برگرده.
برای چالش بعدی، تعداد ۱۰۰ و ۱۰۱ رو آزمایش کن و بررسی کن برنامه در هر حالت چه پاسخی میده.
اگر Web API اجرا نشد، چه کار کنیم؟
هنگام اجرای اولین پروژه ممکنه با چند مشکل متداول روبهرو بشی.
| مشکل | علت احتمالی | راه تشخیص و رفع |
|---|---|---|
| دستور dotnet شناسایی نمیشه | SDK نصب نیست یا PATH مشکل داره | نصب SDK و بررسی dotnet --info |
| پروژه با net10.0 ساخته نمیشه | SDK نسخه ۱۰ در دسترس نیست | بررسی dotnet --list-sdks |
| پورت ۵۰۸۰ اشغال شده | برنامه دیگهای از این پورت استفاده میکنه | توقف برنامه قبلی یا انتخاب پورت آزاد |
| اتصال به سرور برقرار نمیشه | برنامه اجرا نیست یا آدرس اشتباهه | بررسی پیامهای ترمینال و آدرس اجرا |
| خطای 404 دریافت میکنی | مسیر درخواست اشتباهه | بررسی دقیق /orders/total |
| خطای 400 دریافت میکنی | تعداد نامعتبره یا پارامتر درست ارسال نشده | بررسی مقدار quantity |
| خروجی تغییر نمیکنه | تغییرات ذخیره نشده یا برنامه قبلی هنوز اجراست | ذخیره فایل و اجرای مجدد |
این Web API چه محدودیتهایی داره؟
پروژهای که ساختیم، یک نمونه آموزشی برای شناخت رابطه C#، .NET و ASP.NET Core است؛ نه یک فروشگاه کامل.
در این مثال قیمت محصول داخل کد تعریف شده و هنوز دیتابیس، حساب کاربری، موجودی، ثبت سفارش یا مدیریت کامل خطا نداریم.
در فروشگاه واقعی، قیمت معتبر باید از اطلاعات محصول دریافت بشه، موجودی و قوانین فروش بررسی بشن و دسترسی کاربران کنترل بشه.
همچنین باید موضوعاتی مثل تست، Logging، امنیت، مدیریت تنظیمات و نگهداشت رو متناسب با نیاز پروژه در نظر بگیری.
سادگی این مثال برای یادگیریه؛ نه اینکه همین ساختار بهتنهایی برای تمام پروژههای تجاری مناسب باشه.
جدول مقایسه C#، .NET و ASP.NET Core
حالا که هر فناوری رو جداگانه شناختی و دو برنامه کوچک ساختی، میتونیم تفاوتشون رو در یک جدول کاملتر بررسی کنیم.
| سؤال | C# | .NET | ASP.NET Core |
|---|---|---|---|
| چه نوع فناوریه؟ | زبان برنامهنویسی | پلتفرم توسعه نرمافزار | فریمورک توسعه وب |
| وظیفه اصلیش چیه؟ | نوشتن منطق و رفتار برنامه | ساخت و اجرای نرمافزار | پردازش درخواستها و پاسخهای وب |
| فقط مخصوص وبه؟ | خیر | خیر | برای توسعه وب طراحی شده |
| نمونه امکانات | متد، کلاس، شرط و Lambda | SDK، Runtime و کتابخانهها | Routing، Middleware و Authentication |
| در برنامه Console | نوشتن منطق برنامه | ایجاد، ساخت و اجرا | معمولاً نیازی نیست |
| در Web API | نوشتن کد Endpoint و منطق برنامه | ساخت و اجرای برنامه | مدیریت ارتباط HTTP |
نتیجه عملی: برای ساخت Backend با اکوسیستم .NET، این سه فناوری رو باید مکمل یکدیگر بدونی، نه سه گزینه رقیب که مجبور باشی فقط یکی رو انتخاب کنی.
تفاوت .NET Framework، .NET Core و .NET جدید چیست؟
.NET Framework، .NET Core و نسخههای جدید .NET به نسلها و نسخههای متفاوت این پلتفرم مربوط میشن.
این نامها رو نباید با ASP.NET Core، که یک فریمورک توسعه وبه، اشتباه بگیری.
.NET Framework چیست؟
.NET Framework نسل قدیمیتر پلتفرم .NET است که عمدتاً برای Windows طراحی شده.
بسیاری از نرمافزارهای سازمانی، برنامههای دسکتاپ و وبسایتهای قدیمی با این فناوری ساخته شدن و همچنان استفاده میشن.
قدیمیبودن به معنی نامناسببودن تمام برنامههای موجود نیست. تصمیم برای مهاجرت باید بر اساس وابستگیها، وضعیت پشتیبانی، سازگاری کدها و هزینه تغییر گرفته بشه.
.NET Core چه بود؟
.NET Core نسل مدرنتر، متنباز و چندسکویی .NET بود که امکان توسعه و اجرای برنامه روی Windows، Linux و macOS رو فراهم کرد.
آخرین نسخهای که نام اصلی این پلتفرم شامل عبارت .NET Core بود، نسخه 3.1 است.
چرا بعد از .NET Core 3.1 به .NET 5 رسیدیم؟
مایکروسافت از نسخه ۵، عبارت Core رو از نام اصلی پلتفرم حذف کرد.
همچنین برای جلوگیری از اشتباه با .NET Framework 4.x، شماره ۴ در مسیر نسل جدید استفاده نشد و نسخه بعدی با نام .NET 5 منتشر شد.
بعد از اون، نسخههای جدیدتری مثل .NET 6، .NET 8، .NET 9 و .NET 10 عرضه شدن.
پس چرا ASP.NET Core هنوز Core دارد؟
با اینکه عبارت Core از نام اصلی نسل مدرن .NET حذف شده، نام ASP.NET Core حفظ شده است.
بنابراین ASP.NET Core روی .NET 10 به معنی استفاده از نسخه قدیمی .NET Core نیست.
ASP.NET Core همچنان نام فریمورک مدرن توسعه وب مایکروسافته.
برای شروع یادگیری در سال ۲۰۲۶ کدوم نسخه .NET مناسبه؟
در اکتبر ۲۰۲۶، .NET 10 یک نسخه LTS یا دارای پشتیبانی بلندمدته که طبق برنامه رسمی مایکروسافت تا ۱۵ نوامبر ۲۰۲۸ پشتیبانی میشه.
پشتیبانی .NET 8 و .NET 9 هم در ۱۱ نوامبر ۲۰۲۶ به پایان میرسه.
برای شروع پروژه جدید، نسخه پشتیبانیشدهای رو انتخاب کن که با کتابخانهها، ابزارها و محیط انتشار پروژه سازگار باشه.
تمرینهای این مقاله بر اساس .NET 10 نوشته شدن.
مسیر یادگیری Backend با C# و ASP.NET Core
اگه هدفت اینه که در آینده Backend Developer بشی، شناخت تفاوت C#، .NET و ASP.NET Core نقطه شروعه.
بعد از اون باید یاد بگیری چطور منطق نرمافزار رو بنویسی، دادهها رو مدیریت کنی، درخواستهای کاربران رو پردازش کنی و در نهایت پروژه رو منتشر کنی.
مسیر زیر پنج مرحله اصلی داره. قرار نیست تمام جزئیات هر مرحله رو قبل از شروع مرحله بعد کاملاً بلد باشی؛ هدف اینه که با خروجی عملی مشخص پیش بری.
قدم اول: مبانی برنامهنویسی و حل مسئله
اگه هیچ تجربهای در برنامهنویسی نداری، از الگوریتم، متغیرها، شرطها، حلقهها و متدها شروع کن.
هدف این مرحله حفظکردن دستورهای یک زبان نیست؛ باید بتونی مسئله رو تحلیل کنی و برای حل اون راهحل پیدا کنی.
مثلاً قبل از نوشتن کد محاسبه سفارش، باید بدونی ورودیهای برنامه چی هستن، چه محاسبهای باید انجام بشه و نتیجه مورد انتظار چیه.
برای شروع این مسیر میتونی دوره مبانی برنامهنویسی تحلیلداده رو بررسی کنی.
خروجی این مرحله: توانایی حل و پیادهسازی چند مسئله ساده برنامهنویسی.
قدم دوم: یادگیری C# و امکانات اصلی .NET
بعد از یادگیری مبانی، سراغ C# برو.
ابتدا با متدها، کلاسها، مجموعهها و برنامهنویسی شیءگرا آشنا شو. در ادامه، مفاهیمی مثل مدیریت خطا، LINQ، Lambda و async/await رو متناسب با نیاز پروژه یاد بگیر.
همزمان با SDK، Runtime و مدیریت بستهها با NuGet هم کار کن.
خروجی این مرحله: ساخت برنامهای که اطلاعات دریافت کنه، محاسبات مشخصی انجام بده و نتیجه مناسب نمایش بده.
قدم سوم: HTTP و ASP.NET Core
وقتی با C# راحت شدی، مفاهیم توسعه وب رو یاد بگیر.
با درخواست و پاسخ HTTP، متدهای GET، POST، PUT، PATCH و DELETE و وضعیتهای HTTP آشنا شو.
بعد با ASP.NET Core یک Web API بساز و بهتدریج Routing، Dependency Injection، Configuration، مدیریت خطا و Authentication رو یاد بگیر.
خروجی این مرحله: ساخت Web API که درخواست دریافت کنه، ورودیها رو بررسی کنه و پاسخ مناسب برگردونه.
قدم چهارم: SQL و EF Core
در مثال این مقاله، قیمت محصول داخل کد تعریف شده. اما در پروژه واقعی، اطلاعات محصولات و سفارشها معمولاً در دیتابیس ذخیره میشن.
بنابراین طراحی پایگاه داده، ارتباط جدولها و نوشتن Queryهای SQL رو یاد بگیر.
بعد میتونی با EF Core آشنا بشی؛ یک ORM که به برنامههای .NET کمک میکنه با استفاده از کلاسها و اشیا با دیتابیس کار کنن.
البته EF Core بخشی از ASP.NET Core نیست و استفاده از اون اجباری هم نیست. بسته به نیاز پروژه، روشهای دیگهای برای ارتباط با دیتابیس وجود دارن.
خروجی این مرحله: ساخت Web API که اطلاعات رو در دیتابیس ذخیره و از اون دریافت کنه.
قدم پنجم: ساخت و انتشار یک پروژه واقعی
در این مرحله، مهارتهایی که یاد گرفتی رو در یک پروژه منسجم به کار بگیر.
مثلاً فروشگاهی بساز که اطلاعات محصولات رو از دیتابیس دریافت کنه، موجودی رو کنترل کنه، سفارشها رو مدیریت کنه و حساب کاربری داشته باشه.
در ادامه با تست، امنیت، Logging، مدیریت تنظیمات محیطهای Development و Production، Git و انتشار پروژه آشنا شو.
بسته به نوع پروژه و زیرساخت، یادگیری IIS، Docker، مدیریت Secretها و تهیه نسخه پشتیبان از دیتابیس هم میتونه ضروری باشه.
خروجی این مرحله: ساخت و انتشار یک پروژه قابل استفاده و نگهداشت، نه صرفاً برنامهای که روی کامپیوتر خودت اجرا میشه.
از شناخت فناوریها تا ساخت یک پروژه واقعی
اگه مبانی برنامهنویسی و HTML و CSS مقدماتی رو بلدی و میخوای وارد مسیر تخصصی Backend بشی، قدم بعدی میتونه یادگیری پروژهمحور C# و ASP.NET Core باشه.
در دوره پروژهمحور C# و ASP.NET Core تحلیلداده، ابتدا مفاهیم موردنیاز رو یاد میگیری و سپس Backend یک فروشگاه اینترنتی رو توسعه میدی؛ از طراحی مدلها و دیتابیس تا ساخت Web API و اتصال رابط آماده به Backend.
در ادامه، یک سامانه ثبت آگهی مستقل میسازی و در جلسات منتورینگ برای کد و پروژهات بازخورد دریافت میکنی.
این دوره شامل ۶۰ ساعت آموزش عملی و ۱۵ ساعت منتورینگ گروهیه و بهصورت حضوری و آنلاین برگزار میشه.
برای بررسی پیشنیازها، سرفصلها، پروژهها و شرایط برگزاری، صفحه دوره رو ببین.
مشاهده سرفصلها و پروژههای دوره C# تحلیلداده
جمعبندی؛ برای شروع کدوم فناوری رو یاد بگیریم؟
اگه هنوز برنامهنویسی بلد نیستی، از مبانی و حل مسئله شروع کن. بعد C# و امکانات اصلی .NET رو یاد بگیر.
وقتی تونستی برنامههای ساده بنویسی و اجرا کنی، برای ورود به توسعه Backend سراغ HTTP و ASP.NET Core برو.
در مثال فروشگاه این مقاله، با C# منطق محاسبه سفارش رو نوشتیم، با .NET برنامه رو ساختیم و اجرا کردیم و با ASP.NET Core امکان دریافت درخواست HTTP و ارسال پاسخ JSON رو فراهم کردیم.
برای تثبیت یادگیری، هر دو مثال رو اجرا کن و تمرین تغییر تعداد سفارش رو انجام بده.
مهمتر از حفظکردن نام فناوریها اینه که بتونی مسئولیت هرکدوم رو در یک پروژه واقعی تشخیص بدی.
سؤالات متداول
آیا C# و .NET یک چیز هستن؟
خیر. C# یک زبان برنامهنویسیه، اما .NET پلتفرمیه که ابزارها، کتابخانهها و زیرساخت ساخت و اجرای نرمافزار رو فراهم میکنه.
آیا ASP.NET Core یک زبان برنامهنویسیه؟
خیر. ASP.NET Core یک فریمورک توسعه وبه. با استفاده از C#، .NET و ASP.NET Core میتونی برنامههای تحت وب و Web API بسازی.
آیا برای یادگیری ASP.NET Core باید اول C# بلد باشیم؟
اگه میخوای با C# در ASP.NET Core برنامهنویسی کنی، بهتره ابتدا با مبانی زبان، متدها، کلاسها و مجموعهها آشنا باشی. لازم نیست تمام مباحث پیشرفته رو از قبل بلد باشی.
آیا .NET فقط مخصوص زبان C# است؟
خیر. .NET علاوه بر C# از زبانهایی مثل F# و Visual Basic هم پشتیبانی میکنه.
آیا .NET Core همون ASP.NET Core است؟
نه. .NET Core نام نسل مدرن پلتفرم .NET تا نسخه 3.1 بود. ASP.NET Core یک فریمورک توسعه وب است که روی نسخههای سازگار .NET اجرا میشه.
تفاوت ASP.NET و ASP.NET Core چیست؟
ASP.NET کلاسیک عمدتاً بر پایه .NET Framework توسعه پیدا کرد. ASP.NET Core فریمورک مدرن، متنباز و چندسکویی توسعه وب مایکروسافته که روی نسخههای سازگار .NET کار میکنه.
آیا برای ساخت Web API حتماً باید MVC یاد بگیریم؟
خیر. در ASP.NET Core میتونی Web API رو با Minimal APIs یا Controller-based APIs پیادهسازی کنی. انتخاب روش به نوع و پیچیدگی پروژه بستگی داره.
آیا EF Core بخشی از ASP.NET Core است؟
خیر. EF Core یک ORM برای کار با پایگاه داده در برنامههای .NET است. میتونی از اون در ASP.NET Core استفاده کنی، اما استفاده ازش اجباری نیست.
برای اجرای برنامههای .NET به SDK نیاز داریم یا Runtime؟
برای توسعه و ساخت برنامه معمولاً به SDK نیاز داری. برای اجرای برنامه منتشرشده، بسته به روش انتشار، ممکنه Runtime سازگار لازم باشه یا Runtime همراه برنامه ارائه شده باشه.
آیا .NET Framework هنوز استفاده میشه؟
بله. بسیاری از نرمافزارهای سازمانی همچنان از .NET Framework استفاده میکنن. وضعیت پشتیبانی اونها به نسخه و سیستمعامل بستگی داره.
اگه هیچ تجربهای در برنامهنویسی نداریم، از C# شروع کنیم یا ASP.NET Core؟
ابتدا مبانی برنامهنویسی و حل مسئله رو یاد بگیر. بعد سراغ C# و مفاهیم اصلی .NET برو و در ادامه ASP.NET Core و توسعه Web API رو شروع کن.