اینجا باید اول باید Docker desktop رو داشته باشیم و بعد اگر این تیک رو بزنیم میاد دو گیگ رو دانلود میکنه

اگر نزنیم میاد روی IIS میاره اگر اون تیک رو بزنیم میاد روی ماشین مجازی docker میاره

خوب اینجا توی main میاد و Create host builder رو کال میکنه و بعد میگه که host بیاد و با استفاده از args بیا و یه create deafult builder رو درست کن

اگر هم توی args هم چیزی نیست از تنظیمات دیفالت استفاده کن و با استفاده از web builder و تنظیمات که توی start up تنظیماتش هم انجام میشه

که بعد از این قسمت ها میره در همون main و میگه که build میشه و بعد run میشه

خوب net core cross platform هستش

خوب توی پروژه ها وب نیاز به وب سرور داریم و وقتی که ما پروژه میرنیم میره iis رو run میکنه و پروژه رو اجرا میکنه

توی net core یه چیزی که داریم اینه که یه web server ای داریم که open source هستش و وقتی که request میاد سمت پروژه اون رو اجرا میکنه

خوب ما توی سرور های ویندوزی میتونیم از IIS استفاده کنیم ، به عنوان یه پروکسی عمل میکنه

خوب وقتی که میخوایم از این کلاس startup استفاده کنیم لازمه اش فقط اینه که دو تا متد Configure service و Configure رو توش اجرا کنیم

چرا اینترفیس درست نکرده که مجبور بشیم این ها رو پیاده سازی کنیم ؟ برای dependency injection

14:57

به طور مثال اینجا ممکنه تابع configure service یکی یا دو تا یا چند تا ورودی داشته باشه برای همین هم میخوایم از DI استفاده کنیم

خوب configure service اینجا میایم و سرویس هایی که میخوایم ازشون استفاده کنیم رو مینویسیم و ست کردن di ها که جلوتر توضیح داده میشود

خوب CONFIGURE برای استفاده از middleware ها استفاده میشه یا خلق middleware ها

خوب در مدل قدیمی تر از custom action filter ها استفاده میشده که on action executing , on action executed میشه

این اول pipline بوده اسمش و بعد اسمش شده middleware

همیشه لزومه نداره که req تا آخرین مرحله بره تا برگرده

بحث pay for play هر چقدر پول بدی آش میخوری

خوب MVC Classic :

ولی توی MVC CORE محدودیت نداریم

وقتی که view ساختیم هم این ویو همینطوری بالا نمیاد باید یه سری کار انجام بدیم

اینجا وقتی که از use mvc استفاده میکنیم میاد یه پکیج با کلی امکانات رو میاره برای استفاده در صورتی ما فقط میخوایم اون چیزهایی که میخوایم رو اد کنیم

اینجا گفته شده که اگر root یا همون / رو بزنیم یه متن برای طرف ارسال بشه

توی MVC داریم system.web.mvc.controller

در mvc core یه لایه قبل از Action result رو هم داریم به اسم IAction result

خوب حالا برای این که بخوایم view رو پروژه رو بیاریم بالا از این کد ها استفاده میکنیم :

وقتی که use mvc میزنیم میاد همه ی اینها رو به پروژه اد میکنه که نمیخوایم

خوب وقتی که از این دو تا دستور آخر با هم استفاده کنیم میشه معادل add mvc

وقتی که از add controllers استفاده میکنیم :

این ها رو مینویسیم :

وقتی که از end point map controller رو بزنیم دیگه routing کار نمیکنه اینجا ما اومدیم contoller رو شناسوندیم ولی مسیر دسترسی بهش رو تعیین نکردیم که برای این کار چند تا راه هستش اول این که باید بیایم از map controller route استفاده کنیم و بعد بیایم توی همون controller بیایم و مسیر دسترسی بهش رو هم تعیین کنیم و اینطوری درست کار میکنه

حالا اگر بخوایم یه route رو به صورت دیفالت تعیین کنیم

اینجا داریم میگیم که دیفالت کنترلر home و دیفالت action مشه index و بعد این که id هم اختیاریه چون ؟ رو داره

برای این که برنامه درست کنه از اون قسمت هایللایتش فقط استفاده میکنیم و map controller رو پاک میکنیم

خوب ما پروژه ای میخوایم که بکش جدا باشه و فرانتش جدا برای همین میایم فقط از

خوب powershell امکاناتش از command prompt بیشتره

میتونیم چند تا power shell داشته باشیم

دستور info بقیه ورژن های نصبی با فولدرهاش رو نشون میده

توی کد پایین میره یه فولدر به اسمه commander میسازه و یه پروژه به همون اسم میسازه

وقتی که میزنیم code . رو میره پروژه رو از توی اون فولدر باز میکنه

نکته web config در پروژه های قدیمی ساختارش xml هستش

توی ساختار جدید app setting داریم که ساختارش json هستش

مثلا اینجا از configuration برای گرفتن یه سری از تنظیمات مثل connection string ها استفاده میشه

دو تا داریم از این ها یکی برای زمانی که دولپ هستش اون یکی برای production

این تنظیمات برای اجرا و lunch هستش تنظیمات پورت و iis و kestrel و …

این رو کامنت میکنیم :

خوب ما وقتی که ssl برای سایت گرفته باشیم سایتمون روی http و https باز میشه حالا این معنیش اینه که اگر کسی http زد به صورت اتوماتیک بیاد redirect کنه روی https

این رو هم کامنت میکنیم چون میخوایم همه چی فعلا public باشه

خوب اینجا دو تا آدرس داریم یکی برای http و یکی برای https

با control + C هم پروژه استوپ میشه

نوع restful هستش میشه کنترلر + نوع درخواست یعنی مثلا کنترلر home و نوع درخواست get مثلا

در مدل restful به صورت پیش فرض اصلا با اسم action ها کاری نداریم ف اینجا به طور مثال وقتی هم که اسمش رو تغییر بدیم تاثیری نداره

وقتی که توی browser میزنیم یعنی اون کنترلر و از نوع get هستش

باید postman هم داشته باشیم چرا که دیگه توی brwoser نمیتونیم درخواست رو خودمون post بزنیم

برای hot reloding میتونیم این کار رو انجام بدیم :

قسمت 4 و 10:15

این کد پایین اصلا کار نمیکنه چون controller اش اصلا از کلاس درستی ارث بری نشده

ورژن درستش میشه این »

خوب اون قسمتی که کامنت شده داره این رو میگه که controller کلاس کلی هستش که توش همه چی هستش ولی ما در حال حاضر فقط میخوایم از controller ای استفاده کنیم که view نداره برای همین میایم controllerBase استفاده میکنیم

خوب اینجا اومدیم و از map controllers استفاده کردیم

در این حالت دیگه ما routing نداریم و خودمون باید routing رو به صورت دستی در controller تعیین کنیم

اینجا get رو هم بهش اضافه کردیم ولی همچنان کار نمیکنه باید مسیر براش تعیین کنیم

نکته : لزومی نداره اسم کلاس کنترلر آخرش controller داشته باشه ، و این که لزومی نداره اون route هم که تعیین میکنیم با این اسم ها یکسان باشه

توی استاندارد جدید اسم controller رو جمع میکنند مثلا اگر person باشه ، میشه people Controller که یعنی جمع میشه یا اگر command باشه میشه Commands Controller

حالا وقتی که استاندارد رو رعایت کنیم و بعد بیایم برای مسیر یابی از [ ] استفاده کنیم میاد به صورت اتوماتیک اسم controller رو میزاره که اینجا به طور مثال میشه Commands

خوب یه حالتی هم هست برای sub section :

خوب وقتی که اینطوری استفاده کنیم :

چه routing باشه و چه نباشه اینطوری از آدرس root استفاده میکنه

میتونیم جنس خروجی رو تعیین کنیم : اینجا خروجی رو models.command گذاشتیم

نکته ی خیلی مهم تر اینه که این آبجکت رو به صورت json برمیگرونتش

اینجا همونطور که میبینید json رو به صورت pascal case همه اطاعات رو آورده به صورت اتوماتیک تبدیل کرده

توی تکنولوژی های آبی رنگ به ازای هر کاربری که وارد سایت میشه یه thread ساخته میشه و بهش اختصاص داده میشه

ولی در node js اینطوری نیست و کلا یه thread هستش

حالا میخوایم از sync به async تبدیلش کنیم

نکته ی بعد اینه که وقتی که از attribute api controller استفاده نکنیم وقتی که route تعیین نکرده باشیم فقط اون کنترلر کار نمیکنه وقتی که ازش استفاده میکنیم در صورتی که مسیری براش تعیین نکرده باشیم بهمون ارور میده

خوب client میشه front و server میشه کد بک اند و DTX میشه کتابخونه هایی که reusable هستند و models مدل هایی که معادلش در جداول دیتابیس هست و view models میشه چیزهایی که بین view و model میخوایم Share کنیم عنوان ها و کامنت ها و .. میره توی resourse در data باید database context داشته باشیم

از linq برای itrate کردن توی collection های مختلف استفاده میشه

نکته : وقتی که read only تعریف میکنیم یا همون موقع باید بهش مقدار بدیم یا در constructor بهش مقدار بدیم بعدش دیگه نمیتونیم

خوب وقتی که داریم از Action result استفاده میکنیم میتونیم ok رو هم بفرستیم

راه درست اینه که action result رو بنویسیم برای این که بتونیم ok رو بفرستیم و بعد خروجی رو هم تعیین میکنیم که در اینجا به طور مثال تعیین کردیم که collection generic هستش

توی این پایینی دیگه نمیشه ok فرستاد

در حالت بعدی میشه :

خوب حالا به طور مثال اگر بخوایم یه دیتابیس داشته باشیم و با اطلاعات اون بیایم تستمون رو انجام بدیم :

اینجا میرسیم به مفهموم di به این شکل که ما میخوایم به جای این که بیایم و توی این کنترلر بیایم و repository رو new کنیم به جای این کار میخوایم اون reposisitory که میخوایم رو در constructor بهش injcect کنیم