دوره آموزشی
The Great Courses
دوبله زبان فارسی

جدیدترین پروژه‌های C# ASP.NET Core MVC و Web API همراه با تمرین‌ها

جدیدترین پروژه‌های C# ASP.NET Core MVC و Web API همراه با تمرین‌ها

✅ سرفصل و جزئیات آموزش

آنچه یاد خواهید گرفت:

  • خلاصه: فصل صفر را ببینید. همه پروژه‌ها در آنجا قرار دارند! این پروژه‌ها به شما دلیلی می‌دهند که در این دوره برای یادگیری ASP.NET Core شرکت کنید!
  • پروژه 1 - پروژه پیدا کردن پزشک
  • پروژه 2 - پروژه رأی‌گیری کلاسی مبتنی بر LAN
  • پروژه 3 - پروژه دانلودر یوتیوب با youtube-dl
  • پروژه 4 - صورتحساب، موجودی و خرید با بارکدها
  • پروژه 5 - پروژه ردیابی لوکیشن
  • پروژه 6 - سوئیچینگ مبتنی بر اینترنت اشیا
  • طراحی ماژولار با Areas ،ViewImports ،Partial Views، طرح‌بندی‌ها و کامپوننت‌های Razor
  • احراز هویت مبتنی بر هویت و نقش و مجوز مبتنی بر سیاست، احراز هویت با درخواست‌های AJAX
  • ارتباط AJAX با ASP.NET Core، پروژه کوچک روی پنل مدیریت به سبک کتاب الکترونیکی، ویرایش درون‌خطی و درجا، بروزرسانی و لغو داده جدولی با Ajax
  • یک پروژه «پیدا کردن پزشک» را هم‌زمان با پیشرفت در دوره تکمیل می‌کنید. این پروژه همه سناریوهای رایجی را پوشش می‌دهد که یک توسعه‌دهنده وب باید با آن‌ها سروکار داشته باشد.
  • هویت، احراز هویت دو یا چندعاملی، داکر، میان‌افزار، مهاجرت‌ها و WebApi

پیش‌نیازهای دوره

  • کمی تجربه برنامه‌نویسی با سی شارپ
  • آشنایی با مبانی اچ تی ام ال، سی اس اس و جاوا اسکریپت
  • درک کلی از پایگاه داده‌ها و RDBMS
  • [اختیاری] آشنایی با هر پلتفرم مبتنی بر وب مانند ASP DOTNET کلاسیک، MVC یا با PHP
  • دانش NET Core. لازم نیست.

توضیحات دوره

درباره این دوره

(از این دوره می‌توانید به‌عنوان کتاب مرجع استفاده کنید)

کد منبع همه اپلیکیشن‌ها، راه‌حل تمرین‌ها و پروژه‌ها ارائه شده است.

این آموزش یک دوره مقدماتی ASP.NET Core است.

پروژه‌های تحت پوشش:

1. پیدا کردن پزشک

2. پروژه رأی‌گیری کلاسی مبتنی بر LAN

3. صورتحساب، موجودی و خرید با بارکد

4. پروژه ردیابی لوکیشن

5. سوئیچینگ مبتنی بر اینترنت اشیا

6. مزایده بلادرنگ با SignalR ،WebApi و جاوا اسکریپت

7. سوئیچینگ بلادرنگ ESP32 IOT با Azure PubSub Web Service

8. اپلیکیشن رزرو بلیط سینما

9. احراز هویت و ورود با USB Doggle

10. تبدیل دست‌خط به متن با Azure AI Vision API

فصل 1 - Razor Pages 

آشنایی با Razor Pages برای مبتدیان

این دوره ساده‌ترین مقدمه را درباره Razor Pages ارائه می‌دهد، شامل اینکه چرا به آن‌ها نیاز دارید، چه هستند و رویدادهای صفحه و داده چگونه با آن‌ها مدیریت می‌شوند.

یکپارچه‌سازی فایل‌های سی اس اس و جاوا اسکریپت با Razor Pages

این بخش، توضیحی سریع و کامل درباره این است که چگونه Razor Pageهای خود را با یک فریمورک مانند بوت‌استرپ یکپارچه کنید و چگونه فایل‌های سی اس اس و جاوا اسکریپت و ایمیج سفارشی خود را به اپلیکیشن اضافه و آن‌ها را مدیریت کنید. ما فایل‌های مختلفی مانند _ViewStart ،_Layout و دایرکتوری ویژه wwwroot را توضیح می‌دهیم. این مفهوم مشابه master pageها در ASP.NET کلاسیک است. مقاله همچنین یک ویدئوی لینک‌شده دارد که می‌توانید برای درک روشن‌تر چگونگی یکپارچه‌سازی بوت‌استرپ با یک اپلیکیشن بسیار ساده ASP.NET Core تماشا کنید.

ناوبری بین صفحات و لینک‌دهی Razor Pages با Anchor Tag Helperها

Tag helperها روشی استاندارد برای تولید تگ‌های اچ تی ام ال در Razor Pageها ارائه می‌دهند. این تگ‌ها در سمت سرور تفسیر می‌شوند. از نظر سینتکس همانند تگ‌های اچ تی ام ال هستند، بنابراین یک طراح وب می‌تواند آن‌ها را مانند هر تگ اچ تی ام ال دیگری استایل‌دهی و اسکریپت‌نویسی کند. Razor Pageها به‌صورت پیش‌فرض برای tag helperها فعال نیستند. در این آموزش یاد می‌گیریم چگونه یک Razor Page را برای tag helperها فعال کنیم و همچنین یک بررسی عملی درباره استفاده از رایج‌ترین «anchor tag helper» برای رفتن از یک Razor Page به صفحه دیگر خواهیم داشت.

تمرین‌های فصل 1 - RAZOR PAGES

تمرین 1:

یک اپلیکیشن شامل یک Razor Page به نام ایندکس، اما بدون فایل پشتیبان سی شارپ آن بسازید. این Razor Page باید نام شما را چاپ کند.

تمرین 2:

نام خود را این‌گونه نمایش دهید: یک متغیر رشته‌ای به نام strName به صفحه در تمرین 1 اضافه کنید. مقدار متغیر را نام خودتان قرار دهید. سپس متغیر strName را نمایش دهید.

تمرین 3:

یک اپلیکیشن شامل یک Razor Page به نام ایندکس، اما بدون فایل پشتیبان سی شارپ آن بسازید. دو متغیر int به نام‌های i و j بسازید. مقدار i را 7 و مقدار j را 2 قرار دهید. جمع آن‌ها را با سینتکس Razor نمایش دهید.

تمرین 4:

یک تابع به نام، به طور مثال GetName به Razor Page تمرین اول اضافه کنید. این تابع نوع بازگشتی رشته دارد و نام شما را برمی‌گرداند. حالا با فراخوانی تابع بالا، نام خود را نمایش دهید.

تمرین 5:

یک اپلیکیشن شامل یک Razor Page به نام ایندکس، اما بدون فایل پشتیبان سی شارپ آن بسازید.  دو ویژگی از نوع int به نام‌های i و j در کلاس پشتیبان بسازید. مقدار i را 7 و مقدار j را 2 قرار دهید. جمع آن‌ها را با سینتکس Razor نمایش دهید.

تمرین 6:

بدون استفاده از Razor Pageها، یک اپلیکیشن ساده ASP.NET Core بنویسید که هنگام ارسال یک درخواست HTTP GET به صفحه اصلی وب‌سایت شما، پیام "!Hello World" را در استریم پاسخ بنویسد.

تمرین 7:

بدون استفاده از Razor Pageها، یک اپلیکیشن ساده ASP.NET Core بنویسید که هنگام ارسال یک درخواست HTTP GET به صفحه اصلی وب‌سایت شما، یک فرم شامل یک باکس متن ورودی و یک submit ارسال کند. اپلیکیشن باید داده ارسال‌شده را مدیریت کند و با برگرداندن معادل حروف بزرگ متن واردشده توسط کاربر پاسخ دهد.

تمرین 8:

یک اپلیکیشن با یک فایل layout [شامل تگ‌های کامل head ،body و html] بسازید که زمان فعلی سیستم را در یک تگ h1 نشان دهد. این فایل به یک فایل سی اس اس به نام "mycss.css" متصل می‌شود که در دایرکتوری wwwroot قرار دارد و برای تگ p کلاسی دارد که رنگ متن را قرمز می‌کند. یک Razor Page به نام ایندکس بسازید که نام شما را در یک تگ "p" نشان دهد. این صفحه باید در فایل layout ادغام شود. اپلیکیشن را اجرا کنید تا مطمئن شوید نام شما به رنگ قرمز نمایش داده می‌شود.

تمرین 9:

فریم‌ورک‌های سی اس اس زیادی مانند بوت‌استرپ در اینترنت در دسترس هستند. هر فریم‌ورک دلخواهی را پیدا کنید و با لینک‌کردن فایل‌های سی اس اس یا جاوا اسکریپت آن، یک فایل layout [شامل head ،body ،html و غیره] بسازید. سپس، دو صفحه، ایندکس و محصولات را بسازید. هر صفحه دو دکمه یکسان با نام‌های "Home" و "Products" دارد. وقتی روی Home کلیک شود، کاربر باید به صفحه ایندکس هدایت شود و وقتی Products کلیک شود، کاربر باید به صفحه محصولات هدایت شود.

پروژه «پیدا کردن پزشک» - مرحله 1

اکنون این بخش، پیاده‌سازی مفاهیمی است که تا اینجا یاد گرفته‌ایم؛ جایی که با یک پروژه جدید شروع می‌کنیم و سه Razor Page به نام‌های ایندکس، ورود و ثبت‌نام اضافه می‌کنیم. فایل‌های Layout و viewstart از کتابخانه بوت‌استرپ مبتنی بر سی اس اس و جاوا اسکریپت استفاده می‌کنند تا به صفحات «رنگ» بدهند. از tag helperها برای ناوبری صفحات استفاده می‌شود.

فصل 1A - راه‌اندازی اپلیکیشن ASP.NET Core (می‌توانید فعلا رد کنید)

محیط‌ها در ASP.NET Core

این آموزش درباره محیط‌های مختلف مانند Staging، توسعه و تولید توضیح می‌دهد. همچنین توضیح می‌دهیم چگونه آن‌ها را با روش‌های مختلف تنظیم کنید و چگونه به‌صورت شرطی وجود محیط‌ها را بررسی کرده و تنظیمات را اعمال کنید.

Kestrel ،IIS ،IISHttpServer و HTTP.sys

یک اپلیکیشن ASP.NET Core نمی‌تواند مستقیماً درخواست‌ها را از اینترنت دریافت کند. برای این کار به یک سرور نیاز دارد که بتواند در برابر اینترنت قرار بگیرد و به آن کمک کند با کلاینت درخواست‌کننده در سمت دیگر ارتباط برقرار کند. یعنی نوعی اتصال با نرم‌افزار سرور لازم است. این آموزش گزینه‌های مختلف را بررسی می‌کند. بحث درباره فایل launchSettings برای آموزش بعدی گذاشته شده است.

فایل launchSettings.json و launch profileها

با جزئیات دقیق‌تر فایل launchSettings.json آشنا می‌شویم. این فایل شامل launch profileهای مختلفی برای اجرای اپلیکیشن در حالت‌های گوناگون، مانند InProcess ،OutOfProcess و Kestrel مستقیم است. ویژوال استودیو از این فایل برای پر کردن یک منوی کشویی در نوار ابزار استفاده می‌کند تا اپلیکیشن بتواند با کلیک یک دکمه در حالت‌های مختلف اجرا شود. این کار اشکال‌زدایی و تست اپلیکیشن را آسان‌تر می‌کند.

لاگ کردن در ASP.NET Core

لاگ کردن به عیب‌یابی کمک می‌کند، برای حسابرسی مفید است و نشانه‌هایی از نزدیک بودن کرش اپلیکیشن را نشان می‌دهد. این موضوع اصطلاحات مربوط به یک پیام لاگ را توضیح می‌دهد و همچنین بیان می‌کند چگونه یک اپلیکیشن را برای لاگ کردن پیکربندی کنید و چگونه توالی پیام‌های لاگ را مشاهده کنید.

ذخیره و خواندن داده key-value پیکربندی

در آموزش‌های قبلی دیدیم که فایل appSettings json می‌تواند برای پیکربندی سطوح لاگ استفاده شود. اما این تنها کاربرد این فایل نیست، می‌توان از آن برای ذخیره داده key-value سفارشی نیز استفاده کرد که در هر جای اپلیکیشن قابل خواندن باشند. در واقع، سطوح لاگ فقط یکی از مقادیر ممکن هستند، کارهای بسیار بیشتری می‌توان انجام داد. در این آموزش یاد می‌گیریم چگونه مقداری داده ابتدایی ذخیره کنیم و سپس آن را در یک Razor Page بخوانیم.

استفاده از الگوی Options برای خواندن پیکربندی

در آموزش قبلی، ویژگی‌های مختلف یک فایل پیکربندی appSettings را خواندیم. اما برای خواندن ویژگی‌های پیچیده‌تر، مانند "Address" که در آموزش قبلی خواندیم، روش بهتری وجود دارد. این کار از طریق الگوی options انجام می‌شود. حالا City و ISDCode ویژگی Address را با الگوی options می‌خوانیم.

میان‌افزار UseDeveloperExceptionPage چیست و چرا استفاده می‌شود؟

یک اپلیکیشن با ویژوال استودیو 2022 و NET 6. می‌سازیم. اپلیکیشن عمداً یک استثنا مدیریت نشده ایجاد می‌کند. سپس، بررسی می‌کنیم اگر اپلیکیشن در حالت توسعه اجرا شود، ASP.NET Core به‌طور خودکار یک لایه ایمنی برای مدیریت این استثنا فراهم می‌کند و اطلاعات دقیقی درباره خطا ارائه می‌دهد. اما اگر همین اپلیکیشن به طور مثال در تولید باشد، دیگر developer exception page وجود ندارد و اپلیکیشن در میانه کار کرش می‌کند و هیچ پاسخی ارسال نمی‌شود.

نوشتن یک صفحه استثنای سفارشی و میان‌افزار مربوط به UseExceptionHandler

این آموزش ادامه آموزش قبلی است؛ جایی که یاد گرفتیم اگر اپلیکیشن در محیط توسعه اجرا شود، ASP.NET Core یک میان‌افزار به نام UseDeveloperExceptionPage ارائه می‌دهد که استثناهای مدیریت نشده را می‌گیرد و اطلاعات دقیقی از state وضعیت اپلیکیشن ارائه می‌کند. اما این ویژگی برای محیط تولید توصیه نمی‌شود، یک توسعه‌دهنده باید یک صفحه سفارشی ارائه کند تا اطلاعاتی که در نهایت به نمایش می‌رسد فیلتر شود. بیایید یاد بگیریم چگونه!

فصل 2 - مدیریت رویدادهای اولیه در Razor Pages

چگونه یک رویداد کلیک را در Razor Pages مدیریت کنیم؟

می‌توان از یک anchor tag helper برای مشخص‌کردن نام هندلر رویداد کلیک استفاده کرد. برای این کار، ویژگی "asp-page-handler" برابر با نام تابع در کلاس پشتیبان قرار می‌گیرد. این آموزش را بخوانید تا ایده کامل را درک کنید. یک ویدئو هم برای توضیح عملی ضمیمه شده است. آموزش با یک بررسی عملی پایان می‌یابد که نشان می‌دهد چگونه می‌توان یک رویداد کلیک را در سمت سرور مدیریت کرد.

ساخت یک اچ تی ام ال فرم با Razor Pages

این بخش یک مقدمه درباره رایج‌ترین عناصر رابط کاربری است که می‌توان در یک فرم استفاده کرد. مقاله با یک معرفی سریع یک فرم اچ تی ام ال فقط با یک باکس متن شروع می‌شود و سپس، نشان می‌دهد چگونه آن را به یک فرم Razor تبدیل کنید. بعد از آن، یک چک‌باکس، یک لیست دکمه رادیویی و یک منوی کشویی یکی‌یکی اضافه می‌شوند تا یک فرم کامل Razor ساخته شود. داده‌ای ارسال نمی‌شود؛ این موضوع برای آموزش‌های بعدی در نظر گرفته شده است.

چگونه رویداد ارسال یک فرم را مدیریت کنیم؟

رویداد ارسال فرم با یک دکمه ارسال داخل تگ‌های فرم فعال می‌شود. اگر متد برابر POST باشد، که در بیشتر موارد همین‌طور است، هندلر پیشنهادی OnPostAsync است. این متد باید غیرهمزمان باشد، چون داده فرم معمولاً از طریق کوئری‌های INSERT و UPDATE پایگاه داده پردازش می‌شوند و این کار باید به‌صورت غیرهمزمان انجام شود. داده ارسال‌شده را می‌توان از طریق BindProperty دوطرفه استخراج کرد. برای درک بهتر، ویدئوی لینک‌شده را ببینید.

مثال اپلیکیشن برای نمایش داده و بروزرسانی فرم

(سطح مبتدی) فرض کنید مدلی به نام StudentData با ویژگی‌های ID ،نام، مدرسه و نمرات داریم. همچنین فرض کنید از قبل مجموعه‌ای از رکوردهای StudentData را داریم که سه ویژگی اول آن‌ها پر شده‌اند و نمرات برابر NULL است. یک صفحه ایندکس بنویسید تا داده دانش‌آموزان را در جدولی با 5 ستون نمایش دهد. ستون پنجم شامل یک دکمه لینک به نام Edit است. وقتی روی لینک کلیک شود، کاربر باید به صفحه‌ای به نام Edit منتقل شود. صفحه Edit شامل فرمی است که فقط نام و نمرات در آن قابل ویرایش هستند. وقتی فرم ارسال شد، مجموعه را بروزرسانی کنید و کاربر را به صفحه ایندکس ریدایرکت کنید تا رکورد بروزشده را ببیند.

چگونه اعتبارسنجی سمت سرور را مدیریت کنیم؟

این مقاله با یک مقدمه کوتاه درباره اعتبارسنجی‌های سمت سرور و دلیل انجام آن‌ها شروع می‌شود. از یک مدل ساده با فقط یک ویژگی برای توضیح کل فرایند، از تنظیم پیام‌های خطای اعتبارسنجی تا در نهایت درج تگ‌های اعتبارسنجی برای نمایش خطاها استفاده شده است. توضیح می‌دهیم چگونه می‌توان از ویژگی‌های "asp-validation-for" برای نمایش خطاهای اعتبارسنجی استفاده کرد و آن هم به‌صورت جداگانه برای هر ویژگی و در مکانی درست کنار عنصر فرم مربوط به آن و همچنین اینکه موتور ASP.NET Core چگونه تقریباً 99% کار شما را انجام می‌دهد. همچنین توضیح می‌دهیم چگونه می‌توان در صورت نیاز، خلاصه‌ای از همه خطاهای اعتبارسنجی را با ویژگی "asp-validation-summary" نمایش داد.

تمرین‌های فصل 2 - مدیریت رویدادهای اولیه در Razor Pages

تمرین 1:

یک اپلیکیشن ASP.NET Core بسازید که یک Razor Page به نام ایندکس داشته باشد و یک anchor با متن "!Click Me" را نشان دهد. وقتی روی anchor کلیک شود، anchor باید ناپدید شود و با پیام "I am clicked" جایگزین شود. تمام کد را در فایل Index.cshtml بنویسید، هیچ کلاس پشتیبانی نباید استفاده شود.

تمرین 2:

تمرین اول را می‌توان با ارسال یک پارامتر دلخواه querystring هنگام کلیک روی لینک anchor نیز حل کرد. می‌توان وجود آن پارامتر را در "درخواست" با یک شرط "if" بررسی کرد و بر اساس آن پیام یا anchor را نمایش داد. شاید لازم باشد در مورد چگونگی ارسال پارامترهای رشته کوئری با anchor tag helper جستجو کنید. سپس می‌توانید درباره چگونگی خواندن پارامترهای رشته کوئری در یک Razor Page جستجو کنید.

تمرین 3:

به‌جای روش تمرین 2 بالا، یک راه دیگر برای ارسال رشته کوئری از طریق anchor tag helper این است که با یکی از overloadهای "RedirectToPage" یک رشته کوئری ارسال کنید. این طرح را با هدایت از هندلر رویداد کلیک پیاده‌سازی کنید.

تمرین 4:

تمرین 1 را بدون دایرکتیو مربوط به addTagHelpers حل کنید.

تمرین 5:

یک فرم با دو ورودی بسازید که به‌ترتیب دو عدد، به طور مثال i و j، را بپذیرد. رویداد ارسال باید توسط کلاس پشتیبان مدیریت شود و جمع از طریق یک پارامتر رشته کوئری بازگردانی شود. جمع را در همان فرم نمایش دهید.

تمرین 6:

یک فرم با دو ورودی بسازید که به‌ترتیب دو عدد، به طور مثال i و j ، را بپذیرد. جمع را در همان فرم، اما بدون رشته کوئری نمایش دهید.

تمرین 7:

یک فرم ورود با دو ورودی، نام کاربری و رمز عبور بسازید. اگر کاربر نام کاربری را "u" و رمز عبور را "p" وارد کند، پیام "ورود با موفقیت" را نشان دهید. در غیر این صورت پیام "اعتبارنامه‌ها غیرمعتبر" را نمایش دهید. پیام باید در جایی از همان فرم ظاهر شود.

تمرین 8:

یک Razor Page با دو فرم در همان صفحه بسازید. هر فرم یک باکس متن و یک دکمه ارسال دارد. فرم اول یک باکس متن برای نام کوچک دارد، در حالی که فرم دوم یک باکس متن برای نام خانوادگی دارد. در ابتدا فقط فرم اول قابل مشاهده است. وقتی کاربر فرم را ارسال می‌کند، فرم اول مخفی می‌شود و فرم دوم ظاهر می‌شود. وقتی کاربر فرم دوم را ارسال می‌کند، آن هم مخفی می‌شود و به‌جای آن پیامی شامل نام کامل نمایش داده می‌شود.

نکته: بر اساس آنچه تا اینجا یاد گرفته‌اید، شاید لازم باشد از ورودی با type="hidden" استفاده کنید.

پروژه «پیدا کردن پزشک» - مرحله 2

اکنون هندلرهای رویداد برای دکمه‌های ورود و ثبت‌نام متصل شده‌اند. دو کلاس مدل RegistrationInfo و LoginInfo اضافه شده‌اند تا فرم‌های ثبت‌نام و ورود را به هندلرهای OnPostAsync مربوطه وصل کنند. بررسی می‌کنیم که داده فرم واقعاً دریافت می‌شوند و اعتبارسنجی سمت سرور و خلاصه اعتبارسنجی به‌درستی کار می‌کنند. اکنون به مرحله اتصال به پایگاه داده رسیده‌ایم، جایی که کاربر را ثبت‌نام خواهیم کرد.

فصل 3 - اتصال به پایگاه داده - بخش 1

شروع کار با اتصال به پایگاه داده

در اینجا یک آموزش دقیق و خلاصه درباره چگونگی کار اتصال به پایگاه داده در ASP.NET Core ارائه شده است. یک نقشه راه 3 مرحله‌ای برای اجرای اولین کوئری در پایگاه داده دلخواه شما ترسیم می‌شود. آموزش با یک بررسی عملی برای افزودن پکیج‌های nuget مربوط به پایگاه داده sqlite پایان می‌یابد. اتصال واقعی به پایگاه داده در آموزش‌های بعدی انجام می‌شود.

شروع کار با INSERT داده فرم در پایگاه داده

فرمی با فقط یک باکس متن ارسال می‌شود و داده در یک پایگاه داده sqlite درج می‌شود. این یک بررسی 6 مرحله‌ای است که از ساخت مدل شروع می‌شود و سپس به DAL مبتنی بر کلاس DbContext می‌رسد. همچنین توضیح می‌دهیم چگونه یک اپلیکیشن برای تزریق وابستگی مربوط به DbContext پیکربندی می‌شود و نیز چگونه DbContext از constructor یک کلاس PageModel استخراج می‌شود و در نهایت برای اجرای کوئری پایگاه داده استفاده می‌شود.

استراتژی مدیریت DbUpdateException

اگر یک محدودیت شکست بخورد، اگر خطای اتصال رخ دهد یا هر خطای عمومی دیگری پیش بیاید، SaveChanges ممکن است ناموفق شود. بنابراین همیشه باید در یک try-catch قرار گیرد تا DbUpdateException به‌صورت مناسب مدیریت شود. اما چگونه باید کاربر را از چنین خطایی مطلع کرد؟ یکی از راه‌ها این است که از اعتبارسنجی داخلی سمت سرور استفاده کنیم و خطا را به‌صورت مصنوعی به‌عنوان یک شکست اعتبارسنجی نمایش دهیم.

تعیین کلیدهای اصلی و متد ()DbSet.Find

این بخش یک توضیح کوتاه درباره این است که چگونه می‌توان یک کلید اصلی تکی را روی یک مدل از طریق attributeها مشخص کرد، اما این روش زمانی که چند ستون باید به‌عنوان کلید اصلی تنظیم شوند شکست می‌خورد. توضیح می‌دهیم که چنین کلید اصلی کامپوزیت باید از طریق DbContext تنظیم شود. در نهایت، توضیح می‌دهیم چگونه می‌توان یک رکورد را بر اساس کلید اصلی آن جستجو کرد.

نمایش داده و OnGetAsync

این آموزش ادامه همان جایی است که آموزش INSERT کوئری را رها کرده بودیم. کدی که آنجا بررسی کردیم گسترش یافته تا داده درج‌شده را نمایش دهد. در بخش اول این آموزش، سه چیز اولیه و حداقلی را توضیح می‌دهیم که برای نمایش داده در یک Razor Page باید انجام شوند. سپس این موارد را در صفحه ایندکس و کلاس پشتیبان آن اعمال می‌کنیم تا ایده کامل در عمل دیده شود.

حذف رکوردها از پایگاه داده با EF Core

ابتدا اسکیمای کلی حذف یک رکورد از یک جدول را توضیح می‌دهیم. یک حلقه foreach به هر رکورد یک لینک anchor اضافه می‌کند. (id) کلید اصلی هر رکورد به‌عنوان attribute هر لینک anchor مربوطه تنظیم می‌شود و هر لینک anchor نیز به یک تابع هندلر در کلاس پشتیبان متصل می‌شود. وقتی چنین لینکی کلیک شود، هندلر آن id را به‌عنوان پارامتر دریافت می‌کند و کد سی شارپ عملیات حذف را انجام می‌دهد.

ویرایش رکوردها در همان Razor Page با EF Core

این آموزش درباره مطلوب‌ترین سناریو صحبت می‌کند؛ جایی که فرم ورود داده و رکوردهای موجود در همان صفحه نمایش داده می‌شوند. هر رکورد یک لینک ویرایش در کنار خود دارد. وقتی این لینک کلیک شود، رکورد در همان فرم ورود داده ظاهر می‌شود تا کاربر بتواند تغییرات را اعمال کرده و آن را ارسال کند. برای درک سریع مسئله‌ای که اینجا بررسی می‌شود، تصویر پایین را ببینید. این آموزش همچنین یک اسکیمای کلی برای ویرایش با EF Core توضیح می‌دهد.

CRUD با چک‌باکس در یک فرم Razor

این آموزش فرمی با یک باکس متن را که در آموزش قبلی برای عملیات‌های CRUD پیاده‌سازی کرده‌ایم گسترش می‌دهد. حالا یک چک‌باکس به آن فرم اضافه می‌کنیم و می‌بینیم که چقدر راحت می‌توان به پروژه‌ای که از قبل برای CRUD آماده است، قابلیت جدید اضافه کرد!

CRUD با لیست دکمه رادیویی در یک فرم Razor

این آموزش فرم را که در آموزش قبلی پیاده‌سازی کرده‌ایم گسترش می‌دهد. حالا یک لیست دکمه رادیویی به آن فرم اضافه می‌کنیم و می‌بینیم که چقدر راحت می‌توان به پروژه‌ای که از قبل برای CRUD آماده است، قابلیت جدید اضافه کرد! لیست دکمه رادیویی بر پایه یک enumeration هاردکدشده در سی شارپ است. همچنین توضیح می‌دهیم که چگونه تبدیل از enum به نوع داده INT را در سمت پایگاه داده مشخص کنیم.

تمرین‌های فصل 3 - اتصال به پایگاه داده - بخش 1

تمرین 1:

همه مراحل لازم برای راه‌اندازی اولیه اتصال به یک پایگاه داده Sqlite را بنویسید.

تمرین 2:

یک مدل، به طور مثال با نام MyModel، بسازید که یک ویژگی کلید اصلی از نوع رشته با نام CountryID و یک ویژگی دیگر از نوع رشته با نام DisplayName داشته باشد. هر دو ویژگی باید به‌عنوان required علامت‌گذاری شوند. یک فرم بسازید (شامل ورودی‌ها، ارسال و validation spanها) که به شما کمک کند رکوردهای نوع "MyModel" را در یک جدول پایگاه داده sqlite ذخیره کنید. کد شما باید DbUpdateException را به‌صورت مناسب مدیریت کند. پروژه را با افزودن چند رکورد تست کنید و همچنین بررسی کنید که CountryID تکراری در پایگاه داده ذخیره نشود. نکته: کلید اصلی از نوع رشته باید با DatabaseGeneratedOption.None علامت‌گذاری شود، وگرنه کار نخواهد کرد چون مقدار پیش‌فرض DatabaseGeneratedOption.Identity است.

تمرین 3:

فرمی با یک textarea و یک دکمه ارسال بسازید. این فرم برای درج گروهی رکوردهای نوع "MyModel" [به تمرین قبلی مراجعه کنید] در یک جدول پایگاه داده sqlite استفاده می‌شود. چگونگی استفاده از فرم این‌گونه است که کاربر ردیف‌هایی از رکوردها را در قالبی جداشده با سمی‌کالن وارد می‌کند؛ برای مثال Brazil می‌تواند به صورت BZ;Brazil نوشته شود، که در آن "BZ" برابر CountryID و "Brazil" برابر DisplayName است. وقتی فرم ارسال شد، ردیف‌ها باید در یک حلقه خوانده شوند و هر رکورد استخراج و در پایگاه داده درج شود. در نهایت، خلاصه‌ای از تعداد رکوردهای موفق و ناموفق باید در جایی از همان فرم نمایش داده شود.

تمرین 4: [درج و نمایش چک‌باکس]

یک Razor Page بسازید که یک فرم با دو ورودی، یک باکس متن برای نام یک بازیکن و یک چک‌باکس با عنوان "Plays Chess" داشته باشد. وقتی فرم ارسال شد، داده در یک جدول ذخیره می‌شود. همان Razor Page باید به‌صورت جداگانه لیست بازیکنان شطرنج و غیرشطرنج را نمایش دهد. پیشنهاد می‌کنیم یک طرح‌بندی سه‌ستونه با سی اس اس مناسب ایجاد کنید. ستون چپ باید افراد غیر از بازیکنان شطرنج، ستون میانی فرم ورود داده و ستون راست بازیکنان شطرنج را نشان دهد.

نکته: برای فیلترینگ بازیکنان شطرنج باید از LINQ با "Where." استفاده کنید.

تمرین 5 [انتقال تاگل بین لیست‌ها]

تمرین بالا را این‌گونه گسترش دهید: یک لینک anchor (به طور مثال با نام "move to non-chess players") در کنار هر رکورد بازیکنان شطرنج اضافه کنید. وقتی روی این anchor کلیک شود، وضعیت شطرنج‌بازی بازیکن باید تاگل شود تا همان بازیکن به لیست افراد غیر بازیکنان شطرنج «منتقل» شود. به همین ترتیب، یک لینک anchor در کنار هر رکورد بازیکنان غیرشطرنج اضافه کنید. پروژه را اجرا کنید و بررسی کنید که این «انتقال‌ها» واقعاً رخ می‌دهند.

تمرین 6 [seed کردن داده تصادفی]

یک کلاس مدل با سه ویژگی، ID [کلید اصلی خودکار از نوع int]، FirstName ،LastName و DateOfBirth بسازید که آخری از نوع DateTime باشد. پروژه خود را برای اتصال به پایگاه داده sqlite پیکربندی کنید. صفحه Index Razor باید یک لینک anchor با عنوان "Insert 10 random Records" داشته باشد و به تابعی به نام "SeedData" متصل شود. درست زیر لینک anchor، داده در یک جدول اچ تی ام ال با چهار ستون، ID، نام، نام خانوادگی و تاریخ تولد نمایش داده می‌شوند. پروژه را اجرا کنید تا مطمئن شوید هر بار کلیک، 10 رکورد تصادفی به جدول اضافه می‌کند. نکته: می‌توانید از کلاس تصادفی برای تولید متن ASCII تصادفی استفاده کنید.

تمرین 7 [صفحه‌بندی]

به تمرین قبلی صفحه‌بندی اضافه کنید و لینک‌های "Next" و "Prev" را زیر جدول قرار دهید. اندازه صفحه را به طور مثال 7 در نظر بگیرید. لینک "Prev" باید در صفحه اول غیرفعال باشد، در حالی که "Next" باید در صفحه آخر غیرفعال شود. از سی اس اس مناسب برای غیرفعالسازی یک لینک anchor استفاده کنید.

تمرین 8 [مرتب‌سازی]

به تمرین قبلی مرتب‌سازی اضافه کنید، به این صورت که عنوان تاریخ تولد را با یک لینک anchor جایگزین کنید. وقتی این anchor به‌طور مکرر کلیک شود، ترتیب مرتب‌سازی از صعودی به نزولی و برعکس تغییر می‌کند. این‌گونه آن را تست کنید: ابتدا پروژه را اجرا کنید تا مطمئن شوید صفحه‌بندی کار می‌کند و ترتیب مرتب‌سازی همان ترتیب پیش‌فرضی است که از توالی ID دیده می‌شود. حالا به صفحه بعد بروید و روی عنوان تاریخ تولد کلیک کنید. جدول باید اکنون به صفحه اول بازنشانی شود، اما لیست باید به‌صورت مرتب‌شده نمایش داده شود. سپس روی لینک Next کلیک کنید [و بعد رفت‌وبرگشت کنید] تا مطمئن شوید رکوردهای باقی‌مانده را می‌توان با همان ترتیب مرتب‌شده دید.

پروژه «پیدا کردن پزشک» - مرحله 3

اکنون پروژه برای اتصال به پایگاه داده از طریق Sqlite پیکربندی شده است. ماژول ثبت‌نام کاملاً فعال است، کاربر می‌تواند به‌عنوان پزشک یا بیمار ثبت‌نام کند و درج در پایگاه داده نیز کار می‌کند. EMail ID کلید اصلی است. اگر رکوردی از قبل وجود داشته باشد، DbUpdateException مدیریت می‌شود و شکست از طریق خلاصه اعتبارسنجی نمایش داده می‌شود. اگر ثبت‌نام موفق باشد، کاربر به صفحه ورود هدایت می‌شود. اگر با ایمیل و رمز عبور اشتباه وارد شود، از او خواسته می‌شود اصلاح کرده و دوباره تلاش کند. اما اگر با ایمیلی وارد شود که هنوز ثبت نشده است، از او خواسته می‌شود خودش را ثبت‌نام کند. در ادامه یاد می‌گیریم چگونه کد را از طریق ViewImports یکپارچه کنیم.

فصل 4 - ماژولار بودن

فایل ViewImports_ و بایدها و نبایدها

فایل ViewImports.cshtml_ بین همه Razor Pageها در دایرکتوری هم‌سطح خود و دایرکتوری فرعی پایین‌تر مشترک است. این فایل مانند یک include file عمل می‌کند و برای نوشتن لیستی از دایرکتیوها مشترک استفاده می‌شود که در غیر این صورت باید در هر Razor Page جداگانه نوشته شوند. یک Razor Page کل سلسله‌مراتب فایل‌های ViewImports_ بالای خود را در نظر می‌گیرد.

کامپوننت‌های Razor در زمینه اپلیکیشن‌های Razor Pages

کامپوننت‌های Razor واحدهایی مستقل و قابل تعبیه‌سازی هستند که خود را با markup خالص اچ تی ام ال، سی اس اس و JS جایگزین می‌کنند. آن‌ها می‌توانند از صفحه میزبان پارامتر دریافت کنند. در ادامه توضیح می‌دهیم که چه تفاوتی با partial pageها دارند، ساختار یک صفحه کامپوننت چگونه است و نیز چگونه از تگ <component> برای تعبیه آسان یک کامپوننت در یک Razor Page استفاده کنیم.

تمرین‌های فصل 4 - ماژولار بودن

تمرین 1 [چاپ نام، کامپوننت‌های Razor]

یک کامپوننت Razor بنویسید که تابعی به نام "GetName" داشته باشد و نام شما را به‌صورت رشته برگرداند. کامپوننت Razor با فراخوانی این تابع، نام شما را نمایش می‌دهد. این کامپوننت را در Razor Page با نام index.cshtml خود تعبیه کنید تا نام شما نمایش داده شود.

تمرین 2 [شمارش کاراکترها در یک رشته، کامپوننت‌های Razor]

یک کامپوننت Razor بنویسید که دو پارامتر ، HostName و CharToCount می‌گیرد. پارامتر اول نام یک وب‌سایت است، مانند microsoft، بدون پیشوند "https://" و پسوند ".com"، و پارامتر دوم یک کاراکتر، مانند 'A' است. کامپوننت Razor شما یک درخواست به https://{HostName}.com می‌فرستد و صفحه را به‌صورت رشته دانلود می‌کند، سپس تعداد {CharToCount} را در آن رشته می‌شمارد و تعداد کاراکترهای شمارش‌شده را نمایش می‌دهد. از این Razor کامپوننت در یک Razor Page استفاده کنید که فرمی دارد و HostName و CharToCount را به‌عنوان ورودی از کاربر می‌گیرد. وقتی کاربر فرم را ارسال می‌کند، این ورودی‌ها باید به کامپوننت Razor پاس داده شوند تا تعداد کاراکترهای یافت‌شده نمایش داده شود. نکته: از یک درخواست HttpClient در "OnInitializedAsync" برای دانلود رشته و شمارش کاراکترها استفاده کنید. شاید بخواهید آموزش L02، کامپوننت‌های Razor را بررسی کنید؛ جایی که تابع makeSquare همراه با پاس‌دادن پارامترها بررسی شده است.

تمرین 3 [کامپوننت جدول عمومی]

یک کامپوننت Razor به نام Table.razor بنویسید که سه پارامتر می‌پذیرد، یک آرایه رشته‌ای String[] برای ردیف عنوان، یک آرایه String برای ردیف‌های باقی‌مانده جهت نمایش داده و پارامتر سوم برای کلاس سی اس اس که باید روی جدول اعمال شود. بنابراین این یک جدول انعطاف‌پذیر است که می‌تواند در هر پروژه‌ای دوباره استفاده شود. از این کامپوننت در یک Razor Page استفاده کنید تا جدولی سه‌ستونه با ID، نام و تلفن رندر شود. داده می‌توانند به طور مثال دو رکورد باشند. همچنین یک کلاس سی اس اس را به‌عنوان پارامتر پاس دهید تا جدول ظاهر مناسبی پیدا کند.

تمرین 4 [رویداد کلیک در یک کامپوننت Razor]

یک کامپوننت Razor می‌تواند رویداد کلیک را مدیریت و پردازش کند، اگر به‌صورت یک کامپوننت Blazor نوشته شده باشد. برای دیدن مراحل اولیه لازم برای این یکپارچه‌سازی، به لینک وبلاگ ضمیمه و ویدئوی یوتیوب لینک‌شده مراجعه کنید. بعد از آن، کامپوننتی بنویسید که هر بار دکمه‌اش کلیک می‌شود، یک quote جدید نمایش دهد. از یک آرایه رشته برای نگهداری چند quotation استفاده کنید تا کاربر بتواند با کلیک، بین آن‌ها جابجا شود.

پروژه «پیدا کردن پزشک» - مرحله 4

در این مرحله، با انتقال دایرکتیوهای مشترک مختلف (مانند addTagHelper) و فضاهای نام به فایل Razor Page ،viewimports با نام‌های Index.cshtml ،Register.cshtml و Login.cshtml را مرتب می‌کنیم. این روش از این پس در ادامه پروژه نیز دنبال خواهد شد. اکنون آماده‌ایم صفحه اصلی پزشکان را بنویسیم.

فصل 5 - AREAS و PARTIAL VIEWS

مفهوم Areas و یک طرح مجوز

این یک بحث جامع درباره نیاز به "areas" است، اینکه چگونه به‌صورت عملی "areas" را ایجاد کنیم و اینکه برخلاف MVC کلاسیک، وقتی از Razor Pageها استفاده می‌شود مسیریابی به‌صورت پیش‌فرض انجام می‌شود. همچنین توضیح می‌دهیم که tag helperها چگونه به ما کمک می‌کنند لینک‌های anchor درست برای صفحات داخل areas بسازیم. در پایان، یک اسکیمای عملی ورود و مجوز برای پروژه‌هایی که از areas استفاده می‌کنند ارائه می‌کنیم.

Partial Viewها از دیدگاه عملی

این مقاله با توضیح جنبه‌های مختلف یک partial view از دیدگاه عملی و روزمره شروع می‌شود. ما بخش‌هایی را که یا تکراری بودند یا بیش از حد پیچیده و بی‌فایده برای یک توسعه‌دهنده عملی بودند، کاملاً حذف کرده‌ایم. سپس، یک بررسی 3 مرحله‌ای کوچک ارائه می‌دهیم که نشان می‌دهد چگونه یک partial view بسازیم و چگونه آن را در یک Razor Page مصرف کنیم. همچنین توضیح می‌دهیم چگونه می‌توان یک منوی شرطی را به‌راحتی با ایده‌های partial view پیاده‌سازی کرد. Partial Viewها و کامپوننت‌های Razor می‌توانند باعث سردرگمی توسعه‌دهنده شوند، بنابراین در پایان آن‌ها را با کامپوننت‌های Razor مقایسه می‌کنیم.

تمرین‌های فصل 5 - Areas و Partial Views

تمرین 1 [partial ساده]

یک اپلیکیشن بسازید که یک Razor Page به نام ایندکس داشته باشد. حالا یک partial page به نام MyPartial_ اضافه کنید که نام شما را در یک تگ h1 نمایش دهد. از این partial در صفحه ایندکس استفاده کنید تا نام شما نمایش داده شود. دایرکتیوهای helper باید در فایل view imports قرار داده شوند.

تمرین 2 [ناوبری به area]

یک اپلیکیشن بسازید که یک Razor Page به نام ایندکس داشته باشد و شامل یک لینک anchor باشد. یک Area به نام Albums اضافه کنید. داخل این area یک Razor Page به نام ایندکس وجود دارد که یک پیام خوش‌آمدگویی را به طور مثال در یک تگ h1 نمایش می‌دهد. وقتی لینک anchor یادشده کلیک شود، کاربر باید به صفحه ایندکس از area Albums هدایت شود.

پروژه «پیدا کردن پزشک» - مرحله 5

دو "Area"، دکتر و بیمار، اضافه شده‌اند. صفحاتی که مربوط به پزشک هستند در اولی باقی می‌مانند و صفحات مربوط به بیمار در دومی هستند. برای هر دو، صفحه اصلی اضافه شده است. صفحات partial برای Header ،_Menu_ و Footer_ نیز برای area پزشک اضافه شده‌اند و به همین ترتیب صفحات partial برای Header_ و Footer_ برای area بیمار اضافه شده‌اند. اکنون این اتفاق می‌افتد، وقتی کاربر وارد می‌شود، بسته به UserType او به area خودش ریدایرکت می‌شود. حالا بیایید درباره احراز هویت و مجوز یاد بگیریم تا کاربران یک نقش خاص فقط بتوانند به صفحات دسترسی داشته باشند.

فصل 6 - مدیریت State

خواندن، نوشتن و حذف کوکی‌ها در ASP.NET Core

این بررسی را با یک معرفی کوتاه درباره مفهوم کوکی شروع می‌کنیم، سپس اسنیپت‌های مختلف ASP.NET Core را برای ساخت کوکی، خواندن کوکیو و حذف کوکی توضیح می‌دهیم. در پایان، یک اپلیکیشن کاملاً کاربردی برای ساخت و حذف کوکی‌ها می‌سازیم. می‌توانید اپلیکیشن را اجرا کنید تا کل مفهوم را در عمل ببینید!

بنر رضایت کوکی با ITrackingConsentFeature

این بخش یک بررسی عملی درباره چگونگی گرفتن رضایت کاربر برای استفاده از کوکی‌ها در یک وب‌سایت asp.net core است. این پروژه از رابطی به نام ITrackingConsentFeature استفاده می‌کند تا تشخیص دهد آیا کاربر قبلاً رضایت خود را داده است و همچنین رشته کوکی درست را مطابق فرمت http بدست آورد. توابع آماده این رابط کار گرفتن رضایت کاربر را برای توسعه‌دهنده بسیار آسان می‌کنند.

چگونه از سشن برای مدیریت State استفاده کنیم؟

این مقاله سازوکار پشت‌صحنه‌ای را توضیح می‌دهد که سشن بر اساس آن در ASP.NET Core پیاده‌سازی می‌شود. همچنین چهار متد افزونه را که ASP.NET Core برای خواندن و نوشتن متغیرهای سشن فراهم می‌کند لیست می‌کنیم. بعد از آن، یک بررسی عملی ارائه می‌دهیم که در آن وجود یک کلید سشن بررسی می‌شود تا به‌صورت شرطی یک لینک ورود نمایش داده شود، یا نام کاربر همراه با لینک خروج از سیستم نشان داده شود که نام کاربر را از کش مربوط به سشن پاک می‌کند.

سریال‌سازی DateTime در سشن

در ASP.NET Core متد داخلی برای ذخیره DateTime در یک متغیر سشن وجود ندارد. با این حال، مستندات Microsoft MSDN پیشنهاد می‌کنند که توسعه‌دهندگان می‌توانند متدهای افزونه خود را روی ISession بسازند، و برای یکی از این جفت متدهای <Set<T و <Get<T کدی ارائه کرده‌اند که از سریال‌سازی json برای ذخیره هر نوع قابل‌سریال‌سازی به‌صورت رشته استفاده می‌کند. ما کد آن‌ها را کپی کرده‌ایم و از آن برای ساخت یک بررسی کوچک استفاده کرده‌ایم که نشان می‌دهد چگونه می‌توان یک نمونه DateTime را در یک متغیر سشن ذخیره کرد.

چه زمانی و چگونه از TempData استفاده کنیم؟

TempData می‌تواند برای انتقال داده از یک Razor Page به صفحه دیگر استفاده شود. هرچند QueryString و متغیرهای سشن هم می‌توانند همین هدف را برآورده کنند، اما TempData راهی کوتاه‌تر و تمیزتر ارائه می‌دهد و مهم‌تر از همه، به‌صورت داخلی در ASP.NET framework وجود دارد. جذاب‌ترین ویژگی TempData این است که داده پس از اولین عملیات خواندن و استخراج، هر زمان که انجام شود، به‌طور خودکار پاک می‌شود. آموزش با یک بررسی عملی پایان می‌یابد که در آن TempData در یک صفحه ذخیره می‌شود و برای نمایش یک پیام در صفحه دوم استفاده می‌شود. پیام فقط یک‌بار ظاهر می‌شود.

فصل 7 - احراز هویت و مجوز

پیکربندی مجوز مبتنی بر نقش

این توضیحی است درباره اینکه چگونه یک پروژه ASP.NET Core مبتنی بر "Area" را برای مجوز مبتنی بر نقش و سیاست پیکربندی کنیم. مجوز را می‌توان روی کل دایرکتوری "Area" اعمال کر

جدیدترین پروژه‌های C# ASP.NET Core MVC و Web API همراه با تمرین‌ها

  • پروژه «پیدا کردن پزشک» 10:19
  • پروژه رأی‌گیری کلاسی مبتنی بر LAN 07:33
  • صورتحساب، موجودی و خرید با بارکدها 09:51
  • پروژه ردیابی موقعیت 09:37
  • سوئیچینگ مبتنی بر اینترنت اشیا (IOT) (WebApi) 05:29
  • مزایده بلادرنگ با SignalR ،WebApi و جاوا اسکریپت خالص 07:29
  • سوئیچینگ بلادرنگ ESP32 IOT با Azure PubSub Web Service 04:57
  • اپلیکیشن رزرو بلیط سینما 05:04
  • احراز هویت و ورود با USB Doggle 09:58
  • تبدیل دست‌خط به متن با Azure AI Vision API 19:04
  • پروژه ژورنال رویدادهای زندگی 13:12
  • استخراج صدا از ویدئو با ffmpeg 13:41
  • ورود مبتنی بر OTP و دوز با عامل هوش مصنوعی و Semantic Kernel 02:01
  • شروع کار 04:26
  • نمایش داده در یک صفحه 09:17
  • Master Pageها و Layout 08:21
  • ارسال یک فرم با یک باکس متن 16:09
  • درج داده در پایگاه داده 15:27
  • نمایش و حذف یک رکورد 05:36
  • احراز هویت و مجوز مبتنی بر OTP 11:17
  • آشنایی با Razor Pages 20:47
  • پیکربندی میان‌افزار 14:48
  • یکپارچه‌سازی سی اس اس، جاوا اسکریپت و Layout_ 15:33
  • ناوبری بین صفحات و لینک‌دهی Razor Pages با Tag Helperها 10:06
  • تمرین 1 (Razor Pages) 05:51
  • تمرین 2 (Razor Pages) 02:19
  • تمرین 3 (Razor Pages) 02:50
  • تمرین 4 (Razor Pages) 03:57
  • تمرین 5 (Razor Pages) 05:25
  • تمرین 6 (میان‌افزار) 07:12
  • تمرین 7 (میان‌افزار) 04:34
  • تمرین 8 (یکپارچه‌سازی و طرح‌بندی) 09:14
  • تمرین 9 (طرح‌بندی و لینک‌دهی بین صفحات) 03:52
  • محیط‌های Staging، توسعه و تولید 09:12
  • Kestrel ،IIS ،IISHttpServer و HTTP.sys 07:53
  • فایل launchSettings.json 06:53
  • لاگ کردن در ASP.NET Core 09:41
  • ذخیره و خواندن داده key-value پیکربندی 02:49
  • استفاده از الگوی Options برای خواندن پیکربندی 03:37
  • درباره میان‌افزار UseDeveloperExceptionPage 05:19
  • نوشتن یک صفحه استثنای سفارشی 06:02
  • چگونه یک رویداد کلیک را مدیریت کنیم؟ 13:29
  • ساخت یک فرم اچ تی ام ال با Razor Pages 15:11
  • چگونه رویداد ارسال یک فرم را مدیریت کنیم؟ 09:39
  • مثال برای نمایش داده و بروزرسانی فرم 04:52
  • چگونه اعتبارسنجی سمت سرور را مدیریت کنیم؟ 14:15
  • تمرین 1 (رویداد کلیک) 12:33
  • تمرین 2 (رویداد کلیک) 04:40
  • تمرین 3 (رویداد کلیک) 04:28
  • تمرین 4 (رویداد کلیک) 02:11
  • تمرین 5 (ارسال فرم) 05:04
  • تمرین 6 (ارسال فرم) 04:44
  • تمرین 7 (فرم ورود) 07:15
  • تمرین 8 (2 فرم در همان صفحه) 05:27
  • تمرین 9 (فرم تأیید مبتنی بر OTP) 06:27
  • گزینه‌های مختلف پایگاه داده و راه‌اندازی اولیه 13:19
  • شروع کار با INSERT داده فرم در پایگاه داده 23:47
  • استراتژی مدیریت DbUpdateException 08:56
  • کلیدهای اصلی کامپوزیت و جستجو بر اساس PK 09:08
  • نمایش داده و OnGetAsync 10:06
  • حذف رکوردها 13:02
  • ویرایش و بروزرسانی رکوردها 15:21
  • چک‌باکس در یک فرم Razor 14:14
  • Radiobuttonlist در یک فرم Razor 15:21
  • تمرین 1 (بررسی مراحل) 09:52
  • تمرین 2 (کلید اصلی رشته‌ای) 12:17
  • تمرین 3 (درج گروهی با textarea) 06:06
  • تمرین 4 (درج و نمایش با چک‌باکس) 06:39
  • تمرین 5 (انتقال بین لیست‌ها) 03:20
  • تمرین 6 (seed کردن داده تصادفی) 09:35
  • تمرین 7 (صفحه‌بندی) 09:16
  • تمرین 8 (مرتب‌سازی) 05:31
  • ViewImports 10:25
  • کامپوننت‌های Razor 19:51
  • نمونه کامپوننت تبدیل ارز 10:17
  • تمرین 1 (چاپ نام، کامپوننت‌های Razor) 04:20
  • تمرین 2 (شمارش کاراکترها در یک رشته، کامپوننت‌های Razor) 05:12
  • تمرین 3 (کامپوننت جدول عمومی) 04:32
  • تمرین 4 (رویداد کلیک در یک کامپوننت Razor) 03:39
  • Areas و یک طرح مجوز 17:14
  • Partial Views 19:59
  • تمرین 1 (partial ساده) 04:44
  • تمرین 2 (ناوبری به area) 02:35
  • خواندن، نوشتن و حذف کوکی‌ها 18:04
  • بنر رضایت کوکی با ITrackingConsentFeature 14:19
  • مفهوم سشن 16:15
  • سریال‌سازی DateTime در سشن 09:25
  • چگونه از TempData استفاده کنیم؟ 10:45
  • پیکربندی مجوز مبتنی بر نقش 15:26
  • SignIn ،ReturnUrl و LocalRedirect 17:01
  • نمایش اطلاعات کاربر در هر صفحه 07:12
  • SignOutAsync با Tag Helperها 07:43
  • آماده‌سازی برای احراز هویت مبتنی بر هویت 05:35
  • افزودن صفحه ورود 07:58
  • افزودن صفحه ثبت‌نام 06:53
  • تأیید ایمیل یک حساب 07:15
  • ارسال دوباره ایمیل تأیید حساب 04:16
  • قابلیت فراموشی رمز عبور 04:23
  • قابلیت بازنشانی رمز عبور 05:03
  • مجوز مبتنی بر Claim 06:25
  • صفحات Layout و LoginPartial برای هویت 03:11
  • قابلیت خروج 02:15
  • قابلیت Account Lockout 05:03
  • فعالسازی احراز هویت دوعاملی 06:25
  • ورود با احراز هویت دوعاملی 05:34
  • غیرفعالسازی احراز هویت دوعاملی 03:41
  • ساخت یک اپلیکیشن OAuth برای شبکه‌های اجتماعی 04:44
  • احراز هویت مبتنی بر شبکه‌های اجتماعی، مرا به خاطر بسپار و خروج 06:33
  • شروع کار با Web Api 03:40
  • WebApi حداقلی GET بدون پارامتر 03:47
  • WebApi حداقلی GET با پارامترها 04:04
  • WebApi حداقلی GET FindByID 02:19
  • استفاده از Postman برای اجرای WebApi 03:21
  • WebApi حداقلی POST 03:51
  • WebApi حداقلی PUT 03:41
  • WebApi حداقلی DELETE 02:19
  • Over-posting و Data Transfer Objectها 05:48
  • جلوگیری از Over-Posting یک مجموعه 02:55
  • شیء DTO به‌عنوان آرگومان و مقدار بازگشتی 05:29
  • فراخوانی یک WebApi از نوع GET از یک اپلیکیشن C++ WinRT 03:25
  • فراخوانی یک WebApi از نوع POST از یک اپلیکیشن C++ WinRT 05:03
  • OpenAPI و Swagger برای مستندسازی Web API 04:04
  • پیکربندی و استفاده از Swagger برای اجرای WebApi 03:02
  • فراخوانی یک Web API از نوع GET ALL از یک اپلیکیشن WPF 05:37
  • فراخوانی یک Web API از نوع POST از یک اپلیکیشن WPF 03:12
  • فراخوانی یک Web API از نوع PUT و DELETE از یک اپلیکیشن WPF 03:16
  • آشنایی با HttpRepl برای تست Web API 03:07
  • اتصال HttpRepl به یک اندپوینت Web API 04:32
  • تست یک Web API از نوع GET با HttpRepl 03:01
  • تست یک Web API از نوع POST با HttpRepl 03:36
  • استفاده از یک کلاس استاتیک برای Route Handlerها 05:04
  • Binding پارامتر یک متغیر QueryString 03:26
  • Binding پارامتر یک مقدار Header 02:39
  • انواع خاص Binding ضمنی پارامترها 02:36
  • Binding سفارشی پارامترهای API 05:29
  • ValueTask و Task 09:08
  • BindAsync برای Binding سفارشی 03:20
  • آپلود فایل با WebApi 04:14
  • احراز هویت اولیه در WebApi 05:29
  • HandleAuthenticateAsync و احراز هویت اولیه 04:23
  • احراز هویت JWT 04:29
  • اتصال اپلیکیشن کنسول سی شارپ برای احراز هویت اولیه و JWT 03:46
  • احراز هویت شبکه‌های اجتماعی 03:55
  • تمرین 1 03:43
  • تمرین 2 03:47
  • تمرین 3 04:55
  • تمرین 4 06:29
  • لیست کشویی در یک فرم Razor 06:48
  • آپلود فایل(ها) و ذخیره در پایگاه داده 16:20
  • دانلود فایل(ها) و FileResult 10:23
  • ارسال POST مبتنی بر Ajax برای یک فرم Razor 12:51
  • ارسال AJAX POST داده به‌صورت مستقل از فرم 11:05
  • درخواست AJAX GET پارامتردار به یک تابع سی شارپ 10:42
  • پنل مدیریت به سبک EBook مبتنی بر Ajax 08:08
  • احراز هویت و مجوز با درخواست‌های AJAX 07:55
  • ویرایش، بروزرسانی و لغو درجا و درون‌خطی رکوردها 12:55
  • منوهای کشویی زنجیره‌ای Master-Slave با Ajax 13:08
  • چگونه درخواست‌های Cross Origin شکست می‌خورند؟ 06:38
  • چرا درخواست‌های Cross Origin شکست می‌خورند؟ 05:09
  • فعالسازی CORS با یک سیاست 05:59
  • فعالسازی CORS برای فایل‌های سی اس اس یا جاوا اسکریپت خاص 06:38
  • آشنایی با درخواست‌های Preflight در CORS 05:06
  • پیکربندی سیاست مربوط به CORS Preflight 03:16
  • کوکی‌های اعتبارنامه با CORS 03:35
  • تأیید عملی کوکی‌های اعتبارنامه 05:52
  • تمرین 1 02:41
  • تمرین 2 02:15
  • تمرین 3 06:11
  • تمرین 4 04:15
  • تمرین 5 06:48
  • SingleOrDefault ،Find ،FirstOrDefault ،Single و First (11 دقیقه) 11:15
  • Where ،Include و ToList 10:08
  • چگونه رکوردها را مرتب کنیم؟ 05:47
  • اجرای مستقیم کوئری‌های اس کیوال و Procها 09:48
  • وضعیت فولدر App_Data در ASP.NET Core 09:56
  • XML به‌عنوان پایگاه داده در ASP.NET Core 09:22
  • الگوی Repository و تزریق وابستگی با XML به‌عنوان پایگاه داده 16:03
  • اتصال به یک پایگاه داده MySQL 06:30
  • اتصال به یک پایگاه داده اس کیوال سرور 13:24
  • تنظیم یک پروژه اس کیوال سرور 06:59
  • شناسایی دستورات کند با لاگ کردن و Tagها 04:50
  • مقایسه Select ،Projection و Tracking 05:09
  • Lazy Loading و دام‌ها 05:35
  • Buffering و استریمینگ نتیجه Query 03:00
  • Raw SQL با FromSqlRaw برای کارایی بیشتر 04:45
  • رویه‌های ذخیره شده، پارامترهای ایمن و تزریق اس کیوال 05:46
  • Batching در EF Core و برنامه‌ریزی برای بروزرسانی‌های انبوه 04:40
  • Dockerfile، داکر، ایمیج و کانتینرسازی چه هستند؟ 12:29
  • ایجاد یک ایمیج داکر 06:39
  • اجرای یک ایمیج داکر 07:43
  • استفاده از Volumeهای داکر برای ماندگار کردن داده 07:36
  • انتشار در DockerHub با ویژوال استودیو 04:12
  • دریافت و اجرای ایمیج داکر مربوط به مایکروسافت اس کیوال سرور 06:22
  • اتصال به اس کیوال سرور در حال اجرا در یک کانتینر داکر 04:46
  • مفهوم مهاجرت پایگاه داده 06:52
  • پیکربندی ویژوال استودیو برای مهاجرت پایگاه داده 04:53
  • اولین مهاجرت شما در EF Core 05:03
  • مهاجرت روی تغییرات یک مدل 03:56
  • استفاده از اسکریپت‌های اس کیوال برای مهاجرت 05:12
  • بررسی پیاده‌سازی 13:00
  • کانتینرسازی و انتشار پروژه در DockerHub 06:39
  • پیکربندی پروژه برای MySQL 10:15
  • پیکربندی پروژه برای اس کیوال سرور 11:08
  • پروژه‌ای که باید ایجاد شود 07:33
  • مرحله 1 - یکپارچه‌سازی سی اس اس، جاوا اسکریپت و Layout_ 13:34
  • مرحله 2 - مدل‌ها، مهاجرت در Sqlite و seed کردن 11:00
  • مرحله 3 - دریافت OTP و مجوز 12:28
  • مرحله 4 - وارد کردن OTP، ارسال مجدد OTP و ورود 11:45
  • مرحله 5 - نمایش سؤال و ثبت رأی 11:47
  • مرحله نهایی - نتایج رأی‌گیری و نهایی‌سازی 06:16
  • (اندروید روی LAN) باز کردن پورت برای تلفن همراه 03:52
  • پروژه‌ای که باید ایجاد شود 09:51
  • مرحله 1 - یکپارچه‌سازی سی اس اس، جاوا اسکریپت و Layout_ 15:19
  • مرحله 2 - ماژول ورود با OTP 17:05
  • مرحله 3 - اسکن یک کالا به موجودی توسط ادمین 17:00
  • مرحله 3a - باز کردن پورت در PC برای دسترسی تلفن 03:52
  • مرحله 3b - حتماً ببینید - اسکن توسط ادمین با تلفن 03:24
  • مرحله 4 - مشاهده موجودی توسط ادمین 07:12
  • مرحله 5 - سبد خرید مشتری با کوکی‌ها 11:16
  • مرحله 6 - ویرایش سبد خرید توسط مشتری 04:53
  • مرحله 7 - پرداخت مشتری و تولید فاکتور 10:32
  • مرحله نهایی - تاریخچه خرید مشتری و نهایی‌سازی 03:27
  • پروژه‌ای که باید ایجاد شود 09:37
  • مرحله 1 - یکپارچه‌سازی سی اس اس، جاوا اسکریپت و Layout_ 05:48
  • مرحله 2 - مدل‌ها و seed کردن پایگاه داده‌ها هویت و پروژه 09:13
  • مرحله 3 - افزودن احراز هویت مبتنی بر هویت 12:15
  • مرحله 4 - تکمیل ماژول ادمین 06:14
  • مرحله 5 - تکمیل ماژول کاربر 11:01
  • مرحله 6 - میان‌افزار برای جداسازی داده موقعیت 10:46
  • مرحله 7 - WebApi برای ارتباط با تلفن اندروید 05:56
  • مرحله نهایی - کد اپلیکیشن اندروید در DOTNET MAUI 06:57
  • مرحله 1 - طرح پروژه 06:53
  • مرحله 2 - توضیح پروژه WebApi 22:54
  • مرحله 3 - توضیح و بارگذاری برنامه ESP32 09:00
  • مرحله 4 - اجرای هم‌زمان ESP32 و ASP.NET 05:27
  • مرحله 5 - توضیح پروژه کلاینت WinForms 09:16
  • مرحله نهایی - اجرای پروژه - WinForms ،ESP32 و ASP.NET 05:29
  • پروژه‌ای که باید ایجاد شود 02:44
  • مرحله 1 - افزودن احراز هویت کوکی، Basic و JWT 16:31
  • مرحله 2 - ورود، خروج و جاوا اسکریپت 06:49
  • مرحله 3 - مدل‌های پایگاه داده و Project Context 06:29
  • مرحله 4 - افزودن مزایده‌ها و پیشنهاددهندگان توسط ادمین 06:19
  • مرحله 5 (نهایی) - داشبورد پیشنهاددهنده و ادمین 07:13
  • پروژه‌ای که باید بسازیم 04:57
  • طرح پروژه 04:13
  • مرحله 1 - ایجاد یک سرویس Azure PubSub 08:30
  • مرحله 2 - پنل کنترل ASP.NET Core و WebApi 07:58
  • مرحله 3 - بارگذاری پروژه ASP.NET Core در آژور (روش 1) 14:08
  • مرحله 4 - بارگذاری پروژه ASP.NET Core در آژور (روش 2) 06:19
  • مرحله نهایی - برنامه‌نویسی دستگاه ESP32 13:49
  • پروژه‌ای که باید بسازیم 05:04
  • مرحله 1 - Pumbing اولیه 08:35
  • مرحله 2 - رزرو بلیط و پرداخت 09:48
  • مرحله نهایی - مدیریت نمایش و گزارش‌ها توسط ادمین 07:07
  • مرحله 1: کلیدها و اعتبارنامه‌های رایگان و آشنایی با چگونیگ کارکرد کد Semantic Kernel 08:03
  • مرحله 2: توضیح کد منبع برای ورود مبتنی بر OTP 10:17
  • مرحله نهایی: توضیح ماژول دوز و کد منبع برای دانلود 04:31

21,152,400 5,288,100 تومان

مشخصات آموزش

جدیدترین پروژه‌های C# ASP.NET Core MVC و Web API همراه با تمرین‌ها

  • تاریخ به روز رسانی: 1405/04/12
  • سطح دوره:Alls
  • تعداد درس:266
  • مدت زمان :35:29:28
  • حجم :19.55GB
  • زبان:دوبله زبان فارسی
  • دوره آموزشی:AI Academy

آموزش های مرتبط

The Great Courses
2,260,000 452,000 تومان
  • زمان: 03:02:02
  • تعداد درس: 14
  • سطح دوره:
  • زبان: دوبله فارسی
The Great Courses
795,000 159,000 تومان
  • زمان: 58:00
  • تعداد درس: 12
  • سطح دوره:
  • زبان: دوبله فارسی
The Great Courses
19,403,000 3,880,600 تومان
  • زمان: 26:02:40
  • تعداد درس: 175
  • سطح دوره:
  • زبان: دوبله فارسی
The Great Courses
8,508,000 1,701,600 تومان
  • زمان: 11:25:13
  • تعداد درس: 94
  • سطح دوره:
  • زبان: دوبله فارسی
  • سطح دوره:
  • زبان: دوبله فارسی
The Great Courses
1,833,000 366,600 تومان
  • زمان: 02:27:39
  • تعداد درس: 24
  • سطح دوره:
  • زبان: دوبله فارسی
The Great Courses
6,100,500 1,220,100 تومان
  • زمان: 08:11:21
  • تعداد درس: 28
  • سطح دوره:
  • زبان: دوبله فارسی
The Great Courses
7,256,500 1,451,300 تومان
  • زمان: 09:44:25
  • تعداد درس: 67
  • سطح دوره:
  • زبان: دوبله فارسی
The Great Courses
3,634,500 726,900 تومان
  • زمان: 04:52:43
  • تعداد درس: 38
  • سطح دوره:
  • زبان: دوبله فارسی

آیا سوالی دارید؟

ما به شما کمک خواهیم کرد تا شغل و رشد خود را افزایش دهید.
امروز با ما تماس بگیرید