سلام عزیزان
خب تو این جلسه میخوایم با ساز و کار Asp.Net Core آشنا بشیم و ببینیم چطور کار میکنه.
پیشنیاز این جلسه اینه که بدونید، Http چطور کار میکنه.
اگه نمیدونید، سرچ کنین، دوتا مقاله بخونین که دستتون بیاد.
بعد برگردید.
خب اول بریم سراغ مهم ترین و البته ساده ترین بحث، یعنی مسیر دهی یا Routing .
طبق Http ، شما یک درخواست سمت سرور ارسال میکنید، اون سرور هم یک پاسخ به شما ارسال میکنه.
خب، ممکنه بعضیا ندونن سرور چیه، پس یه توضیح کوتاه میدم.
(اونایی که میدونن، از این قسمت عبورکنند که حوصلشون سر نره)
***********************************************************
سرور چیست ؟
سرور در لغت، به معنای کسیه که جواب دهنده و پاسخگو هست.
یعنی یک شخصی که شما میری پیشش، ازش درخواستی رو میکنی، اون شخص هم به شما یک پاسخی رو میده.
حالا توی دنیای تکنولوژی، سرور، یک کامپیوتر قوی هست، که دایما به اینترنت متصل هست،
و توانایی این رو داره که همه افراد بتونن بهش متصل بشن.
به عنوان مثال، وقتی سرچ میکنید :
instagram.com
یعنی شما، میخواید که از یک سرور به اسم اینستاگرام، یک چیزی رو درخواست کنید،
چه چیزی؟ صفحه اصلی.
اون هم میاد و صفحه اول سایتش رو به شما نشون میده.
(آدرس اصلی فقط اینستاگرامه، و دات کام ربطی به سرور نداره.)
خب پس فهمیدیم که سرور یک اسم داره، و با اون اسم میشه بهش متصل شد.
**********************************************************
داخل Asp.Net Core ، وقتی پروژه اجرا میشه،
یک اسم و یک عدد رو میتونید توی URL صفحه ببینید
https://localhost:5500
البته توی سیستمای مختلف، ممکنه اون عدد متفاوت باشه.
این مسیر صفحه اصلی هست.
خب این توضیحات رو تا اینجا توی ذهنتون داشته باشید، تا برگردیم.
داخل پروژه، پوشه ای هست به نام Controllers ،
فایلی با اسم HomeController داخلش رو باز کنید .
داخل فایل یک کلاس هست با نام HomeController .
خب حالا بریم ببینیم که کنترلر چیه اصلا؟
کنترلر اسمش روشه، کنترل کننده.
درخواست ها رو میاد و کنترل میکنه.
اون بالا که داشتم آدرس و url رو توضیح میدادم،
گفتم به طرف یک URL ، یک درخواست میفرستیم، اون هم یک پاسخ به ما میده.
با کد های داخل HomeController کاری نداشته باشید فعلا، چون اضافه زیاد داره.
همه کد های داخلش رو پاک کنین،
اینایی که این پایین نوشتم رو داخلش کپی کنین.
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Shop.Web.Models;
namespace Shop.Web.Controllers;
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
خب همونطور که میبینید، یک کلاس ایجاد شده با نام HomeController ،
که از یک کلاسی دیگر با نام Controller ارث بری کرده،
این ارث بری به این دلیل هست که به Asp.Net Core ، بفهمونیم که این کلاس، جز کنترلر ها هست.
یعنی میتونه درخواست سمتش بیاد، و اون درخواست رو پاسخ بده.
پایین تر، یک متد وجود داره، به نام Index .
در اینجا، داخل Asp.Net Core تمام متد های داخل کنترلر، تبدیل میشن به یک URL .
یعنی متد ایندکسی که دارید داخل کد میبینید، تبدیل میشه به URL ، که درخواستی رو میگیره ، بعد به اون پاسخ میده.
پس چی شد، وقتی کاربر میاد وارد میکنه
https://instagram/Home/index
یعنی برو داخل سروری به نام اینستاگرام، بعد داخل کنترلری به اسم Home ، داخل کنترل هم یک متد هست به نام Index ، برو محتوایی که اون برمیگردونه رو برام بردار و بیار.
نکته، درسته اسم کنترلر ما HomeController هستش ، ولی داخل URL ، نام کنترلر نمایش داده نمیشه و حساب نمیشه.
حالا میرسیم به برسی کردن بدنه متد ها.
متد هایی که میخواید به درخواست ها پاسخ بدن،
باید نوع بازگشتشون IActionResult باشه.
یعنی یک درخواست وارد میشه،
میاد بالای سر اون متد،
میگه یه چیزی به من بده،
یه جوابی به من بده.
اون متد هم میاد و یک پاسخ میده، که اون پاسخ باید حتما از جنس IActionResult باشه.
حالا IActionResult چی هست؟
ببینید، ما توی موارد متعدد، نیاز داریم چیزای مختلفی برای کاربر بفرستیم،
یک صفحه html
یک فایل json
یک فایل ویدیویی
یک ارور
و ده ها نوع داده دیگه.
خب بخوایم تک تک اینا رو حفظ کنیم و روی متد ها بنویسیم
public int Add()
public jsonResult Get()
باید انواع این داده ها رو حفظ کنید.
حالا میگی باشه،
من حفظ میکنم مشکلی ندارم.
خب یه سوال دیگه پیش میاد،
اگرخروجی متد شما، دو نوع بود،
اون موقع میخواید چیکار کنین؟
مثلا میخواید بگید که، اگر طرف اطلاعاتش رو درست وارد کرد، یه فایل Html میفرستم و صفحه بعدی رو بهش نشون میدم، ولی اگه غلط بود، یه فایل Json میفرستم و داخلش ارور میزارم.
خب اینجا گیر میوفتید! چون متد فقط یک نوع داده رو میتونه ارسال کنه.
کار IActionResult اینه،
یک اینترفیسه
که تمامی انواع داده رو داخل خودش داره و براش تعریف کردن،
یعنی شما با صدا زدن اون،
به ده ها نوع داده دسترسی دارید.
به متد هایی که، نوع داده ای بازگشتشون، IActionResult هست، اصطلاحا اکشن گفته میشه.
پس از این به بعد، هرجا گفتم اکشن، یعنی یک متد که نوع بازگشتیش، IActionResult هستند.
خب داخل متد، یک پاسخ ارسال میکنیم،
public IActionResult Index()
{
return View();
}
کلمه return View به این معنا که یک فایل Html برای درخواست کننده، ارسال میکنه.
خب یه سوال پیش میاد، فایل Html کو؟ ما که چیزی نساختیم.
شما زمانی که این return View رو مینویسید داخل اکشن، به صورت پیشفرض، مسیر پایین رو برای ویوو در نظر میگیره.
Views/ControllerName/ActionName.cshtml
یعنی داخل پوشه Views ، یک پوشه ای با نام همون کنترلری که داخلش هستید وجود داره،
که درون اون پوشه یک فایل وجود داره که با نام اکشن، یکسان هست.
به عکس پایین توجه کنید
حالا چرا فرمت فایل ها Html نیست و cshtml هست؟
این مدل از فایل ها، بهشون میگن فایل های ریزور یا ریزور ویوو.
باعث میشه که شما بتونین بین فایل های html، کد سی شارپ بنویسید.
به عنوان مثال میخواید اگر کاربر به سایت وارد شده بود، عکس پروفایلش گوشه بالا نمایش داده بشه،
اما اگر کاربر به سایت وارد نشده بود، اون قسمت خالی باشه.
اینجا میایم و از کد های سی شارپ استفاده میکنیم.
حتما حتما باید فرمت فایل همون باشه، وگرنه پیداش نمیکنه.
خب این جلسه یکم شلوغ شد.
اگه ویدیو بود یه 25 دقیقه طول میکشید.
حدود دوساعته که دارم براتون این رو مینویسم و بالاخره تموم شد.
خدانگهدارتون