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
مشاهده در ایتا
دانلود
3.9M حجم رسانه بالاست
مشاهده در ایتا
نصب کتابخانه آفلاین به شرطی قبلاً نصب کرده بودی.
CookieApp.zip
حجم: 2.6M
این کد یک کنترلر (Controller) در فریم‌ورک ASP.NET Core است که برای مدیریت کوکی‌ها (Cookies) استفاده می‌شود. این پروژه عملیات اصلی ایجاد (CRUD) روی کوکی‌ها را انجام می‌دهد. در ادامه جزئیات بخش‌های مختلف کد را توضیح می‌دهم:
### ۱. ساختار کلی و داده‌ها * فضای نام (Namespace): CookieApp.Controllers نشان می‌دهد که این کد مربوط به لایه کنترلر برنامه است. * **لیست موقت (
_cookies
):** از آنجا که کوکی‌ها در مرورگر کاربر ذخیره می‌شوند و سرور دسترسی مستقیم به لیست تمام کوکی‌های ذخیره شده ندارد (مگر آنهایی که با هر درخواست ارسال می‌شوند)، یک لیست استاتیک
_cookies
ایجاد شده تا وضعیت کوکی‌ها را در حافظه سرور نگه دارد و بتوانیم آن‌ها را در View نمایش دهیم. (در برنامه‌های واقعی به جای لیست استاتیک باید از دیتابیس استفاده کرد). ### ۲. اکشن متدها (Action Methods) #### متد
Index
(نمایش لیست) * این متد با متد
GetAllCookies()
فراخوانی می‌شود. *
GetAllCookies
دو کار انجام می‌دهد: ۱. کوکی‌های موجود در لیست حافظه (
_cookies
) را بررسی می‌کند و مقدار واقعی آن‌ها را از Request.Cookies می‌خواند. ۲. تمام کوکی‌های ارسال شده توسط مرورگر را می‌خواند و اگر در لیست نباشند، به آن‌ها اضافه می‌کند. * در نهایت لیست به View بازگردانده می‌شود. #### متدهای
Create
(ایجاد کوکی) * نسخه GET: فقط یک View خالی برای فرم ایجاد برمی‌گرداند. * نسخه POST: اطلاعات فرم را دریافت می‌کند. * اعتبارسنجی: با استفاده از
IsValidName
و
IsValidValue
چک می‌کند که نام و مقدار کوکی فقط شامل حروف انگلیسی و اعداد باشد. * تنظیمات: یک شیء
CookieOptions
ساخته می‌شود که تاریخ انقضا، امنیت (Https) و سایر تنظیمات را مشخص می‌کند. * ذخیره: با استفاده از Response.Cookies.Append کوکی در مرورگر کاربر ایجاد می‌شود و همزمان در لیست
_cookies
ثبت می‌شود. #### متدهای
Edit
(ویرایش کوکی) * کوکی‌ها به صورت مستقیم قابل ویرایش نیستند. بنابراین این متد ابتدا کوکی قدیمی را با Response.Cookies.Delete حذف می‌کند. * سپس یک کوکی جدید با همان نام اما مقادیر و تاریخ انقضای جدید ایجاد می‌کند. * اطلاعات در لیست
_cookies
نیز به‌روزرسانی می‌شوند. #### متدهای
Delete
(حذف کوکی) * کوکی مورد نظر را از لیست پیدا می‌کند. * با استفاده از Response.Cookies.Delete آن را از مرورگر حذف می‌کند. * همچنین از لیست حافظه سرور (
_cookies
) نیز پاک می‌کند. #### متد
Details
(مشاهده جزئیات) * اطلاعات یک کوکی خاص را نمایش می‌دهد. * علاوه بر اطلاعات ذخیره شده در لیست، مقدار واقعی فعلی کوکی را از Request.Cookies می‌خواند و در
ViewBag
قرار می‌دهد تا کاربر ببیند آیا کوکی منقضی شده است یا خیر. ### ۳. نکات فنی و امنیتی * **
HttpOnly = true
:** این تنظیم باعث می‌شود اسکریپت‌های سمت کلاینت (JavaScript) نتوانند به محتوای کوکی دسترسی داشته باشند، که امنیت را در برابر حملات XSS افزایش می‌دهد. * **
Secure = Request.IsHttps
:** اگر درخواست HTTPS باشد، کوکی فقط از طریق کانال امن منتقل می‌شود. * **
ValidateAntiForgeryToken
:** از حملات CSRF (جعل درخواست بین سایتی) جلوگیری می‌کند. ### ۴. جمع‌بندی این کد یک رابط کاربری مدیریتی ساده برای کار با کوکی‌ها فراهم می‌کند. اگرچه از لیست استاتیک استفاده شده که برای محیط‌های Production (تولید) مناسب نیست (چون با ریستارت سرور پاک می‌شود و در سرورهای چند هسته‌ای مشکل‌ساز می‌شود)، اما برای یادگیری و تست نحوه کار با Response.Cookies و Request.Cookies بسیار مناسب است.
🚀 نقشه راه جامع و صددرصدی فول‌استک ASP.NET Core 🚀 📊 سطح ۱: مقدماتی - بنا نهادن ستون‌های استوار 💻 سی‌شارپ (C# Basics) • 🏗️ ساختار برنامه، متغیرها و انواع داده • ➕ عملگرها، شرط‌ها و حلقه‌ها • 📚 آرایه‌ها و کالکشن‌ها (Lists, Dictionaries) • 🧱 شی‌گرایی (OOP): کلاس، شی، وراثت، پلی‌مورفیسم 🌐 وب (HTML & CSS Basics) • 📄 ساختار سند HTML5 (تگ‌های معنایی) • 🎨 مقدمات CSS3: انتخابگرها، رنگ‌ها، فونت‌ها • 📦 مدل باکس (Box Model) و نمایش (Display) • 📱 فلسفه طراحی واکنش‌گرا (Responsive Design) و مدیا کوئری‌ها ⚡ جاوااسکریپت (JavaScript Fundamentals) • 🔤 متغیرها (var, let, const) و انواع داده • ⚙️ توابع و Arrow Functions • 🖱️ کار با DOM (انتخاب عناصر، تغییر محتوا و استایل) • 🔘 رویدادها (Events) مثل click و submit 🌍 مبانی وب و پروتکل HTTP (Web Fundamentals) • 🔄 درک معماری کلاینت-سرور • 📨 مفاهیم کلیدی HTTP: Methodها، Status Codeها • 📡 ساختار درخواست و پاسخ (Request/Response) • 🍪 آشنایی با Session و Cookie 📌 کنترل نسخه (Version Control) • 📂 مفاهیم پایه Git: مخزن، کامیت، شاخه • ⌨️ کار با دستورات ضروری: clone, add, commit, push, pull • 🐙 ایجاد حساب در GitHub/GitLab 🎯 ASP.NET Core MVC (شروع) • 🛠️ نصب محیط (Visual Studio / VS Code) • 📁 ساختار پروژه و پوشه‌ها • 👨‍💻 ایجاد اولین Controller و View • 📤 ارسال داده از Controller به View ------------------------------------------------------------------ 📈 سطح ۲: متوسط - پویایی و زیبایی 💻 سی‌شارپ (Intermediate C#) • 🔍 کار با LINQ برای پردازش داده‌ها • 🧰 Generic Collections و Interfaces • ⚠️ مدیریت خطاها (Exception Handling) • ⏳ برنامه‌نویسی Asynchronous (async/await) 🎨 وب (Bootstrap Framework) • 📦 نصب و پیکربندی Bootstrap • 📐 سیستم Grid برای چیدمان • 🧩 کامپوننت‌ها: Navbar, Cards, Modals, Alerts • 📝 فرم‌ها و اعتبارسنجی ظاهری ⚡ جاوااسکریپت (Intermediate JS) • 🔄 Callbacks, Promises و Async/Await • 📊 کار با JSON و Fetch API • 🌳 مدیریت DOM پیشرفته و Event Bubbling • ✨ ES6+ Features 🗄️ پایگاه داده (Database Foundations) • 📐 اصول طراحی: نرمال‌سازی و روابط • 🎛️ آشنایی با SQL Server و SSMS • ✍️ کوئری‌های SQL: SELECT, INSERT, UPDATE, DELETE • ⚡ آشنایی با ایندکس (Index) 🎯 ASP.NET Core MVC (Core Development) • 📋 مدل‌ها و Data Annotations • 🔗 Entity Framework Core: Code-First، Migration • 🏷️ تگ‌های کمکی (Tag Helpers) • 📝 ایجاد فرم‌ها و پردازش (GET & POST) • ✅ اعتبارسنجی سمت سرور و کلاینت ------------------------------------------------------------------- 🔥 سطح ۳: پیشرفته - حرفه‌ای شدن 💻 سی‌شارپ (Advanced C#) • 🧬 برنامه‌نویسی جنریک پیشرفته • 📢 Delegates, Events و Lambda Expressions • ⚡ LINQ to Entities و بهینه‌سازی کوئری‌ها • 🏗️ الگوهای طراحی (Repository, Singleton) 🗄️ پایگاه داده (Advanced Database) • 🔧 بهینه‌سازی کوئری‌های LINQ • 📦 آشنایی با Stored Procedure و View • 🔄 مدیریت تراکنش‌ها (Transactions) 🛠️ ابزارهای توسعه (Developer Tools) • 🔍 ابزار توسعه‌دهندگان مرورگر (F12) • 📬 کار با Postman برای تست API 🔒 امنیت (Security Deep Dive) • 🔐 احراز هویت دو مرحله‌ای (2FA) • 🔑 JWT در مقابل Cookie-based • 🚦 Rate Limiting ⚡ جاوااسکریپت (Modern JS & Libraries) • ⚛️ آشنایی با React/Vue.js • 📦 مدیریت پکیج‌ها با npm/yarn • 🛠️ کتابخانه‌های کاربردی (SweetAlert2, DataTables) 🎯 ASP.NET Core MVC (Advanced Server-Side) • 💉 تزریق وابستگی (Dependency Injection) • 🎛️ فیلترها (Filters) و Middlewareها • 🛡️ Authentication و Authorization (Identity) • 🛡️ محافظت در برابر CSRF و XSS • 🌐 ایجاد Web API های RESTful 🔄 تعامل سرور و کلاینت (AJAX Integration) • 📡 استفاده از fetch یا jQuery.ajax • 🔄 به‌روزرسانی Partial Views با AJAX • ⚠️ مدیریت خطاهای سمت کلاینت ------------------------------------------------------------------- 👑 سطح ۴: کارشناسی - معماری و مقیاس‌پذیری 🏗️ معماری نرم‌افزار (Architecture) • ✨ معماری تمیز (Clean Architecture) و DDD • 📋 الگوی CQRS با MediatR • 🧩 میکروسرویس‌ها (Microservices) • 📨 طراحی Event-Driven با RabbitMQ 💻 سی‌شارپ و بهینه‌سازی (High Performance C#) • 🧠 مدیریت حافظه و Garbage Collection • ⚡ استفاده از Span و Memory • 🔄 برنامه‌نویسی موازی (Parallel Programming) • 🔍 Reflection و Emit 🎨 فرانت‌اند پیشرفته (Advanced Frontend) • 🧩 ساخت کامپوننت‌های پیشرفته • 📊 مدیریت State پیچیده • ⚡ بهینه‌سازی Core Web Vitals • 📱 Progressive Web Apps (PWA) 🎯 ASP.NET Core MVC (Expert Server-Side)
• 💬 SignalR برای ارتباط بلادرنگ • 🚀 کشینگ پیشرفته با Redis • 💓 Health Checks و مانیتورینگ • ✍️ Middleware سفارشی 🧪 تست نرم‌افزار (Testing & QA) • 🧪 تست واحد (Unit Testing) با xUnit • 🔗 تست یکپارچگی (Integration Testing) • 🌐 تست فرانت‌اند با Jest/Selenium 🚀 DevOps و استقرار (DevOps & Deployment) • 🐳 کانتینری‌سازی با Docker • ☸️ اورکستریشن با Kubernetes • 🔄 CI/CD با GitHub Actions • 🖥️ استقرار روی Linux (Nginx) و IIS -------------------------------------------------------------------- 💡 پروژه‌های عملی پیشنهادی 🟢 سطح مقدماتی 📄 صفحه شخصی "درباره من" HTML + CSS سفارشی + Bootstrap ساده 🟡 سطح متوسط 📝 وبلاگ ساده EF Core + Layout + اصول SQL 🟠 سطح پیشرفته 🛒 فروشگاه اینترنتی AJAX + پنل مدیریت + احراز هویت + تست با Postman 🔴 سطح کارشناسی 📊 سیستم مدیریت محتوا (CMS) معماری تمیز + SignalR + Docker + استقرار ابری -------------------------------------------------------------------- ✨ نکات کلیدی برای موفقیت • ⏰ روزی ۳-۴ ساعت زمان مفید • 📝 پروژه‌محور یاد بگیرید • 🤝 در GitHub مشارکت کنید • 📚 مستندات مایکروسافت را بخوانید • 🧪 همیشه کدتان را تست کنید • 🌏 انگلیسی یاد بگیرید -------------------------------------------------------------------- 🎯 جمع‌بندی این نقشه راه، یک مسیر ۱۰۰٪ کامل برای تبدیل شدن به یک فول‌استک دولوپر حرفه‌ای با ASP.NET Core است. از سطح مقدماتی تا کارشناسی، همه چیز را پوشش داده: ✅ برنامه‌نویسی C# ✅ طراحی وب (HTML/CSS/JS) ✅ پایگاه داده و SQL ✅ امنیت و ابزارها ✅ معماری و DevOps ✅ پروژه‌های عملی -------------------------------------------------------------------- 🌟 موفق باشید! راه سختی است، اما شدنی و لذت‌بخش! 🌟
AjaxCrudProject.zip
حجم: 2.5M
پروژه Ajax کراد بدونه رفرش
برای پیاده‌سازی این سناریو در ویوی
Index
، ما باید یک حلقه
for
ایجاد کنیم که ۴۰۵ دکمه تولید کند. هر دکمه باید به اکشن
HandleError
در کنترلر
Error
لینک شود و شماره مربوط به خود را ارسال نماید. در ادامه کد کامل ویو (View) و کنترلر (Controller) آورده شده است: ### ۱. کد کنترلر (ErrorController.cs) این کنترلر شامل اکشنی است که شماره را دریافت کرده و نام ویو را به صورت پویا انتخاب می‌کند. csharp using Microsoft.AspNetCore.Mvc; namespace MyProject.Controllers { public class ErrorController : Controller { // این اکشن نام ویو را بر اساس شماره ورودی برمی‌گرداند public IActionResult HandleError(int id) { // ساخت نام ویو (مثلاً اگر id=32 باشد، viewName می‌شود "Action32") string viewName = $"Action{id}"; // بررسی می‌کنیم که آیا فایل ویو وجود دارد یا خیر تا خطا ندهد var result = ViewEngine.FindView(ControllerContext, viewName, isMainPage: false); if (result.Success) { return View(viewName); } else { // اگر ویو وجود نداشت، به صفحه ۴۰۴ اصلی برگردان return View("Action404"); } } } } ### ۲. کد ویو (Index.cshtml) در این ویو، یک حلقه از ۱ تا ۴۰۵ اجرا می‌شود و برای هر عدد یک دکمه (Tag Anchor) ساخته می‌شود که به اکشن بالا لینک دارد. html @{ ViewData["Title"] = "صفحه اصلی"; } <div class="text-center"> <h1 class="display-4">لیست دکمه‌های اکشن</h1> <p>برای مشاهده هر ویو روی دکمه مربوطه کلیک کنید:</p> <div class="button-container"> @* حلقه برای تولید ۴۰۵ دکمه *@ @for (int i = 1; i <= 405; i++) { // استفاده از Tag Helper برای ساخت لینک به اکشن HandleError در کنترلر Error // مقدار i به عنوان پارامتر id ارسال می‌شود <a asp-controller="Error" asp-action="HandleError" asp-route-id="@i" class="btn btn-primary m-1"> اکشن @i </a> } </div> </div> ### نکات مهم: ۱. تعداد دکمه‌ها: همانطور که خواستید، حلقه تا ۴۰۵ ادامه دارد. ۲. لینک‌دهی: از
asp-controller="Error"
و
asp-action="HandleError"
استفاده شده است تا وقتی روی دکمه ۳۲ کلیک می‌شود، آدرس
/Error/HandleError?id=32
اجرا شود. ۳. نام‌گذاری ویوها: فرض بر این است که شما در پوشه
Views/Error
فایل‌هایی با نام‌های Action1.cshtml، Action2.cshtml و ... Action404.cshtml و Action405.cshtml را ایجاد کرده‌اید. اگر فایل Action32.cshtml وجود نداشته باشد، کنترلر به طور خودکار کاربر را به
Action404
هدایت می‌کند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
بسیار عالی. در اینجا بدون نوشتن حتی یک خط کد، معماری و عملکرد پروژه را بررسی می‌کنیم و به طور مفهومی توضیح می‌دهم که LINQ دقیقاً در کجای این سیستم و چگونه کار می‌کند. ### ۱. معماری کلی پروژه (بدون دیتابیس) این پروژه به جای اینکه اطلاعات را در یک نرم‌افزار سنگین دیتابیس (مثل SQL Server) ذخیره کند، از حافظه رم کامپیوتر استفاده می‌کند. تصور کنید که ما یک تخته وایت‌برد (Whiteboard) در دفتر کار داریم. * مدل (Model): این قالبی است که ما برای هر کارت روی تخته تعریف کرده‌ایم (مثلاً: هر کارت باید عنوان، توضیحات و تاریخ داشته باشد). * ریپازیتوری (Repository): این شخصی است که مسئول مدیریت تخته وایت‌برد است. هیچ‌کس جز او حق ندارد روی تخته چیزی بنویسد یا پاک کند. کنترلر به او می‌گوید «لیست کارهای انجام شده را بده» و او با نگاه کردن به تخته، جواب را برمی‌گرداند. * کنترلر (Controller): این مثل مدیر پروژه است که دستور می‌دهد. وقتی شما در مرورگر دکمه‌ای را می‌زنید، کنترلر متوجه می‌شود و به ریپازیتوری دستور می‌دهد. * ویو (View): این فقط نمایشگر است. صفحه‌ای است که شما در مرورگر می‌بینید و نتایج کار ریپازیتوری روی آن چاپ می‌شود. --- ### ۲. نقش LINQ در این پروژه (توضیح مفهومی) در دنیای برنامه‌نویسی قدیمی، برای پیدا کردن یک اطلاعات خاص در یک لیست، باید یک «حلقه» (Loop) می‌نوشتیم. مثلاً: «از اولین آیتم شروع کن، یکی‌یکی چک کن تا به آیتم مورد نظر برسی». این کار زمان‌بر و خسته‌کننده است. LINQ (Language Integrated Query) زبانی است که به ما اجازه می‌دهد با لیست‌های داده دقیقاً مثل یک دیتابیس حرفه‌ای صحبت کنیم. ما به زبان فارسی (یا انگلیسی) سوال می‌پرسیم و جواب را می‌گیریم، بدون اینکه نگران جزئیات چرخش در بین داده‌ها باشیم. در اینجا دقیقاً LINQ در بخش‌های مختلف پروژه چه کاری انجام می‌دهد: #### الف) فیلتر کردن (Where) - جستجو و فیلتر وقتی شما در کادر جستجو تایپ می‌کنید (مثلاً کلمه «پروژه») و دکمه جستجو را می‌زنید: * بدون LINQ: برنامه باید تک‌تک کارت‌ها را برمی‌داشت و چک می‌کرد آیا کلمه «پروژه» داخلش هست یا نه. * با LINQ: ما به لیست می‌گوییم: «فقط آن کارت‌هایی را به من بده که در عنوانشان کلمه پروژه وجود دارد.» * LINQ بلافاصله یک زیرمجموعه جدید از کارت‌ها را جدا کرده و تحویل می‌دهد. این دقیقاً همان کاری است که در متدهای
Search
و
FilterByStatus
انجام شده است. #### ب) مرتب‌سازی (OrderBy) - اولویت‌بندی وقتی وارد صفحه اصلی می‌شوید، می‌خواهید جدیدترین کارها در بالای لیست باشند. * بدون LINQ: باید الگوریتم‌های پیچیده مرتب‌سازی (مثل حبابی یا سریع) پیاده‌سازی می‌شد. * با LINQ: ما به لیست می‌گوییم: «خودت را بر اساس تاریخ ایجاد، از جدید به قدیم مرتب کن.» * همچنین در بخش فیلتر وضعیت، به لیست گفتیم: «خودت را بر اساس اولویت (عدد کمتر یعنی مهم‌تر) مرتب کن.» LINQ این کار را در کسری از ثانیه انجام می‌دهد. #### ج) انتخاب خاص (Select) - نمایش ستون‌ها فرض کنید ما فقط می‌خواهیم یک لیست کشویی (Dropdown) از نام دانشجویان بسازیم و نیازی به نمره یا کد ملی نداریم. * با LINQ: ما به دیتابیس می‌گوییم: «از بین تمام این اطلاعات، فقط ستون نام و نام خانوادگی را بردار و بقیه را دور بریز.» این کار باعث سبک شدن برنامه و افزایش سرعت می‌شود. #### د) پیدا کردن یک مورد خاص (FirstOrDefault) - ویرایش و حذف وقتی روی دکمه «ویرایش» یک کارت خاص کلیک می‌کنید، سیستم باید فقط همان یک کارت را پیدا کند. * با LINQ: ما می‌گوییم: «در بین تمام کارت‌ها، دنبال کارتی بگرد که شناسه (ID) آن برابر با ۵ است. اولین موردی که پیدا کردی را به من بده.» * اگر چیزی پیدا نکرد، مقدار «تهی» (Null) برمی‌گرداند تا برنامه خطا ندهد. #### هـ) تجمیع و محاسبات (Max, Any, Count) - مدیریت هوشمند در بخش ایجاد کارت جدید، ما نمی‌خواهیم شناسه دو کارت یکسان شود. * با LINQ: ما می‌پرسیم: «آیا اصلاً کارتی در لیست وجود دارد؟» (
Any
). اگر جواب بله بود، می‌پرسیم: «بزرگترین شناسه (ID) موجود چند است؟» (
Max
). سپس یک عدد به آن اضافه می‌کنیم تا شناسه جدید ساخته شود. ### خلاصه در این پروژه حرفه‌ای، LINQ به عنوان موتور پردازش داده عمل می‌کند. هر جا که نیاز به تصمیم‌گیری درباره داده‌ها بود (چه کاری را نشان دهیم؟، کدام یکی مهم‌تر است؟، آیا این وجود دارد؟)، LINQ وارد عمل شده و با دستورات بسیار کوتاه و خوانا، کارهای پیچیده برنامه‌نویسی را انجام می‌دهد. این کار باعث می‌شود کد شما تمیز، سریع و قابل نگهداری باشد.