eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
120 دنبال‌کننده
168 عکس
38 ویدیو
377 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
پروژه ASP.Net Core MVC (وب و سی شارپ)
ببخشید اگر پروژه در دیتابیس ذخیره کنم حجم پروژه بالای 5 مگابایت می شود
در اینجا توضیحات کامل و مرحله‌به‌مرحله درباره پروژه‌ای که کدهای آن را نوشتیم آورده شده است. این پروژه یک وب‌اپلیکیشن مدیریت محصولات است که به جای دیتابیس، اطلاعات را در یک فایل متنی ذخیره می‌کند. ### ۱. هدف پروژه هدف اصلی این پروژه، پیاده‌سازی عملیات CRUD (مخفف Create, Read, Update, Delete) بدون نیاز به نصب و پیکربندی دیتابیس‌های سنگین مثل SQL Server است. این روش برای پروژه‌های کوچک، تمرینی یا یادگیری مفید است. ### ۲. معماری پروژه (Architecture) این پروژه از الگوی MVC (Model-View-Controller) پیروی می‌کند و یک لایه سرویس (Service) برای مدیریت فایل دارد: * Model (مدل): کلاس
Product
که ساختار داده‌ها (شناسه، نام، قیمت) را تعریف می‌کند. * View (نما): صفحات HTML (Razor) که به کاربر نمایش داده می‌شوند (
Index
,
Create
,
Edit
). * Controller (کنترلر):
ProductController
که بین کاربر و منطق برنامه واسطه می‌شود. * Service/Repository (سرویس):
ProductRepository
که وظیفه خواندن و نوشتن در فایل متنی را بر عهده دارد. ### ۳. نحوه ذخیره‌سازی داده‌ها (Data Storage) داده‌ها در یک فایل با فرمت CSV (Comma Separated Values) ذخیره می‌شوند. این فرمت شبیه به یک جدول اکسل است که هر سطر آن یک رکورد و ستون‌ها با کاما (
,
) از هم جدا شده‌اند. محتوای فایل database.txt:
Id,Name,Price
1,کتاب,50000
2,خودکار,10000
* ردیف اول: هدرها (نام ستون‌ها). * ردیف‌های بعدی: داده‌های واقعی. ### ۴. عملکرد متدهای سرویس (Repository Logic) کلاس
ProductRepository
مغز متفکر سیستم فایل است: 1. GetAll (خواندن): * کل فایل را خط به خط می‌خواند (File.ReadAllLines). * خط اول (هدر) را نادیده می‌گیرد. * بقیه خطوط را با کاما جدا (
Split
) کرده و به آبجکت‌های
Product
تبدیل می‌کند. 2. Add (افزودن): * لیست فعلی را می‌خواند تا آخرین
Id
را پیدا کند. * یک
Id
جدید (آخرین + ۱) تولید می‌کند. * اطلاعات جدید را به انتهای فایل اضافه می‌کند (File.AppendAllText). 3. Update (ویرایش) و Delete (حذف): * از آنجا که ویرایش یک خط خاص در فایل متنی دشوار است، این متدها کل فایل را در حافظه می‌خوانند. * تغییرات لازم (ویرایش یا حذف آیتم از لیست) را در حافظه اعمال می‌کنند. * کل فایل روی دیسک را پاک کرده و لیست جدید را جایگزین می‌کنند (File.WriteAllLines). ### ۵. جریان اجرای برنامه (Workflow) الف) نمایش لیست (Index): 1. کاربر آدرس
/Product/Index
را می‌زند. 2. کنترلر متد
GetAll
سرویس را صدا می‌زند. 3. سرویس فایل را خوانده و لیست محصولات را برمی‌گرداند. 4. کنترلر لیست را به View می‌فرستد تا در جدول نمایش داده شود. ب) ثبت محصول جدید (Create): 1. کاربر فرم را پر کرده و دکمه ذخیره را می‌زند. 2. کنترلر اطلاعات را دریافت کرده و به متد
Add
سرویس می‌دهد. 3. سرویس یک خط جدید به فایل database.txt اضافه می‌کند. 4. کاربر به صفحه لیست هدایت می‌شود. ### ۶. نکات فنی و محدودیت‌ها * همزمانی (Concurrency): اگر دو کاربر همزمان سعی کنند محصولی را اضافه کنند، ممکن است یکی از درخواست‌ها با خطا مواجه شود (چون فایل قفل شده است). این روش برای ترافیک بالا مناسب نیست. * Type Safety: تبدیل متن (String) داخل فایل به عدد (int.Parse) نیاز به دقت دارد؛ اگر فایل دستکاری شود، برنامه ممکن است کرش کند. * مسیر فایل: فایل در پوشه
Data
(در کنار فایل اجرایی برنامه) ذخیره می‌شود. این پروژه یک نمونه عالی برای درک نحوه کارکرد سیستم‌های مدیریت فایل و پایه و اساس دیتابیس‌ها است.
TextFileShopProject.zip
حجم: 2.6M
فروشگاه حرفه ای به جای ذخیره در دیتابیس ذخیره در فایل text
RamDbLikeProject.zip
حجم: 2.5M
پروژه ای نوشتم که کنترلر نمیفهمد از دیتابیس می خواند یا فایل text شبیه ساز Db Context و EFCore ساختم
پروژه در مورد Session
حتماً! بیایید این دو مفهوم مهم را با زبان ساده و شکلک‌ها بررسی کنیم تا ماندگار شوند. --- ### ۱. سشن (Session) 🧠👜 سشن مثل یک کیف پول کوچک است که وقتی شما وارد یک فروشگاه (سایت) می‌شوید، به شما می‌دهند. * چطور کار می‌کند؟ 🆔 وقتی برای اولین بار وارد سایت می‌شوید، سرور یک کد شناسایی منحصر‌به‌فرد برای شما می‌سازد (مثلاً
SessionID
). 🛒 شما: «سلام، من مشتری جدیدم.» 🖥 سرور: «خوش آمدی! این یک کیف پول خالی است. هر چیزی بخری داخلش می‌گذارم. این هم شناسه‌ی توست:
12345
» * کاربردش چیست؟ 🛍 فرض کنید در یک فروشگاه آنلاین هستید: ۱. یک کفش خریدید ➡️ سرور در سشن شما می‌نویسد: «کفش». ۲. یک جوراب خریدید ➡️ سرور در سشن شما اضافه می‌کند: «جوراب». ۳. به صفحه پرداخت می‌روید ➡️ سرور کیف پول (سشن) شما را چک می‌کند و می‌بیند داخلش «کفش + جوراب» است. * زمانی که مرورگر را می‌بندید: 🚪 معمولاً وقتی مرورگر را می‌بندید یا دکمه خروج را می‌زنید، آن کیف پول پاره می‌شود یا تحویل داده می‌شود و اطلاعات داخلش پاک می‌شود (منقضی می‌شود). --- ### ۲. احراز هویت (Authentication) 🔐🆔 احراز هویت مثل چک کردن کارت ملی در ورودی یک سازمان مهم است. این مرحله قبل از سشن اتفاق می‌افتد. * چطور کار می‌کند؟ 🛂 شما می‌خواهید وارد پنل کاربری شوید. سایت از شما می‌خواهد ثابت کنید که «شما خودتان هستید». 🔑 شما: نام کاربری و رمز عبور را وارد می‌کنید. 🖥 سرور: اطلاعات را چک می‌کند... ✅ اگر درست بود: «خوش آمدی آقای/خانم رضایی! اجازه دارید وارد شوید.» ❌ اگر غلط بود: «شما که هستید؟ اجازه ورود ندارید!» * تفاوت با سشن: * احراز هویت (Authentication): فقط می‌پرسد «تو کی هستی؟» (شناسایی). * سشن (Session): می‌گوید «الان چه کار می‌کنی؟» (حافظه کوتاه‌مدت). --- ### 🎬 سناریوی مشترک (ورود به سایت) بیایید این دو را کنار هم ببینیم: ۱. مرحله ۱: احراز هویت (Authentication) 🔐 شما به درِ سایت می‌رسید و می‌گویید: «من علی هستم و رمزم ۱۲۳۴ است.» 🛂 نگهبان (سرور): کارت ملی شما را چک می‌کند، می‌بیند درست است و می‌گوید: «تایید شد! شما علی هستید.» ۲. مرحله ۲: ساخت سشن (Session Creation) 🧠 حالا که سرور فهمید شما علی هستید، یک سشن برایتان می‌سازد. 🖥 سرور: «چون تو علی هستی، من یک سشن باز می‌کنم و داخلش می‌نویسم
User = Ali
و
IsAdmin = True
.» ۳. مرحله ۳: مرور صفحات (Authorization/Usage) 🏃‍♂️ شما در سایت می‌گردید (صفحه محصولات، صفحه پروفایل و...). 🧠 سشن: در تمام این مدت، سشن شما را همراهی می‌کند. وقتی به صفحه «مدیریت» می‌روید، سرور به سشن نگاه می‌کند و می‌بیند
IsAdmin = True
است، پس اجازه ورود می‌دهد. خلاصه: * Authentication: ثابت کردن هویت (تو خودتی؟) 🔐 * Session: نگه داشتن اطلاعات موقت (تو الان چی داری؟) 🧠 امیدوارم این توضیحات با شکلک‌ها براتون ملموس شده باشه! 😉🌹
بسیار عالی! حالا نقش کوکی (Cookie) را هم به این معادله اضافه می‌کنیم تا مکمل سشن و احراز هویت را بفهمید. بیایید کوکی را مثل یک «کارت پارکینگ» یا «دستبند رنگی» در نظر بگیریم که در دست شماست. --- ### ۱. کوکی (Cookie) 🍪🎫 کوکی یک فایل کوچک متنی است که مرورگر شما (کامپیوتر شخصی‌تان) نگه‌داری می‌کند، نه سرور! * چطور کار می‌کند؟ 💾 وقتی شما کاری را انجام می‌دهید (مثلاً وارد سایت می‌شوید)، سرور به مرورگر شما می‌گوید: «این یک کوکی است، آن را نگه دار.» 🖥 سرور: «بفرما این کوکی را داخل مرورگرت ذخیره کن.» 💻 مرورگر: «چشم، آن را در جیبم گذاشتم.» * ویژگی مهم: کوکی پایدار است. حتی اگر مرورگر را ببندید و دوباره باز کنید، کوکی هنوز آنجاست (مگر اینکه تاریخ انقضای آن تمام شده باشد). --- ### ۲. رابطه کوکی و سشن (Cookie & Session) 🤝 این دو مثل دو قفل و کلید هستند با هم کار می‌کنند. بیایید سناریوی ورود به سایت را دوباره ببینیم: ۱. شما وارد سایت می‌شوید (احراز هویت): 🔐 شما نام کاربری و رمز عبور را می‌زنید. 🖥 سرور چک می‌کند و می‌بیند که شما هستید. ۲. سرور سشن می‌سازد: 🧠 سرور یک سشن (کیف پول) روی حافظه خودش باز می‌کند و داخلش می‌نویسد:
User = Ali
. این سشن یک شناسه دارد، مثلاً
ID = 9999
. ۳. سرور کوکی می‌دهد: 🍪 سرور نمی‌تواند آن کیف پول بزرگ (سشن) را به شما بدهد. پس فقط شناسه آن را به شما می‌دهد. 🖥 سرور: «آقای علی، من سشن تو را ساختم. این هم یک کوکی که داخلش نوشته شده
SessionID = 9999
. این را نگه دار و هر بار که خواستی چیزی بخواهی، این را به من نشان بده.» ۴. شما در سایت می‌گردید: 🏃‍♂️ شما روی لینک «پروفایل» کلیک می‌کنید. 💻 مرورگر شما به صورت خودکار آن کوکی (کارت پارکینگ) را به سرور تحویل می‌دهد. 🖥 سرور کوکی را می‌گیرد، می‌خواند: «آها،
SessionID
برابر با
9999
است.» سپس در آرشیو خودش می‌گردد و سشن شماره ۹۹۹۹ را پیدا می‌کند و می‌بیند: «اوه! این سشن متعلق به علی است.» ✅ اجازه ورود صادر شد. خلاصه رابطه: * سشن: اطلاعات واقعی و مهم روی سرور است (پول و وسایل داخل صندوق). 🧠 * کوکی: کلیدِ دسترسی به آن اطلاعات است که در جیب شماست. 🗝🍪 --- ### ۳. رابطه کوکی و احراز هویت (Cookie & Auth) 🔑 در روش‌های جدیدتر (مثل JWT یا توکن‌ها)، کوکی نقش مهم‌تری بازی می‌کند. * روش سنتی (Session-Based): کوکی فقط یک شماره تلفن (Session ID) بود که سرور را صدا می‌زد. * روش مدرن (Token-Based): گاهی اوقات، سرور اطلاعات هویتی شما را رمزگذاری می‌کند و مستقیماً داخل خود کوکی می‌گذارد. 🍪 کوکی: «من حاوی اطلاعاتی هستم که می‌گویم من علی هستم و تا ۲۴ ساعت اعتبار دارم.» در این حالت، سرور نیازی نیست در حافظه خودش بگردد؛ فقط کوکی را چک می‌کند و اگر رمز درست بود، تایید می‌کند. --- ### 🎬 تشبیه نهایی (پارکینگ مجلل) ۱. احراز هویت (Authentication): 🛂 شما به پارکینگ می‌رسید و پلیس چک می‌کند که گواهینامه دارید یا نه. اگر داشتید، اجازه ورود می‌دهد. ۲. سشن (Session): 🏢 پارکینگ یک صندوق امانات (Safe) به شما می‌دهد. شما وسایل باارزش‌تان را در آن صندوق می‌گذارید. این صندوق در اتاق مدیر است (روی سرور). ۳. کوکی (Cookie): 🎫 مدیر به شما یک دستبند پلاستیکی یا یک کارت مغناطیسی می‌دهد. این دستبند در دست شماست (روی مرورگر شما). هر بار که بخواهید به صندوق‌تان دسترسی پیدا کنید، دستبند را به دستگاه می‌زنید. دستگاه می‌فهمد این دستبند متعلق به صندوق شماره ۵ است و در را باز می‌کند. نتیجه: * بدون **احراز هویت**، اصلاً وارد پارکینگ نمی‌شوید. * بدون **سشن**، جایی ندارید که اطلاعات‌تان را نگه دارید. * بدون **کوکی**، هر بار که می‌خواهید به صندوق‌تان برسید، باید هویتتان را دوباره اثبات کنید! کوکی باعث می‌شود سرور شما را «بشناسد» بدون اینکه دوباره رمز عبور بپرسد. 🚀