آموزش C# و .Net
1.56K subscribers
465 photos
329 videos
19 files
2.88K links
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk

آیدی ادمین:
@ma_limbs
Download Telegram
‏در ASP.NET Core، برای مدیریت خطاها و پیام‌های مرتبط با احراز هویت (Authentication) و مجوزدهی (Authorization) در توسعه وب، می‌توانید از مکانیزم‌های مختلفی استفاده کنید.

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

‏برای مثال، اگر کاربر احراز هویت نشده باشد، Middleware احراز هویت معمولاً یک کد وضعیت HTTP 401 Unauthorized برمی‌گرداند. اگر کاربر احراز هویت شده باشد اما مجوز لازم را نداشته باشد، Middleware مجوزدهی معمولاً یک کد وضعیت 403 Forbidden ارسال می‌کند.

‏می‌توانید این رفتار را با پیکربندی ConfigureServices و Configure در فایل Startup.cs (یا Program.cs در .NET 6 به بعد) سفارشی‌سازی کنید. به عنوان مثال، می‌توانید تعیین کنید که در صورت عدم موفقیت در احراز هویت، به کدام صفحه هدایت شود یا چه پاسخ JSONی برگردانده شود.

‏برای مدیریت خطاهای کلی‌تر در برنامه، می‌توانید از ExceptionHandlingMiddleware استفاده کنید. این Middleware امکان ثبت خطاها و نمایش پیام‌های خطای سفارشی را فراهم می‌کند، که می‌تواند شامل اطلاعات مربوط به احراز هویت یا مجوزدهی نیز باشد.

‏در کنترلرهای خود، می‌توانید از attributeهایی مانند [Authorize] برای محدود کردن دسترسی به اکشن‌ها استفاده کنید. در صورت عدم رعایت این محدودیت‌ها، ASP.NET Core به طور خودکار پاسخ مناسبی را برمی‌گرداند.

‏برای نمایش پیام‌های کاربرپسندتر، می‌توانید از View Components یا Partial Views برای نمایش پیام‌های خطا یا موفقیت پس از عملیات احراز هویت/مجوزدهی استفاده کنید. این پیام‌ها می‌توانند در قالب JSON یا HTML به کاربر نمایش داده شوند.

‏نکته کلیدی، پیکربندی صحیح Middlewareها و مدیریت خطاها در سطح کنترلرها و سرویس‌ها است تا تجربه کاربری امن و شفافی فراهم شود. 🚀💡🔒

https://t.me/csharp7
‏دانستنی C#

‏Tuple deconstruction و record deconstruction دو روش متفاوت برای استخراج مقادیر از یک شی هستند.

‏Tuple deconstruction بر اساس موقعیت اعضا عمل می‌کند، در حالی که record deconstruction بر اساس نام پراپرتی‌ها. 💡

‏به این ترتیب، اگر ترتیب اعضای Tuple تغییر کند، کد شما دچار مشکل می‌شود. اما در record، تغییر ترتیب پراپرتی‌ها تاثیری ندارد.

https://t.me/csharp7
🔵 کوییز #مفاهیم_کلی_برنامه_نویسی

🟣 موضوع : ‏چالش‌های اولیه در برنامه‌نویسی: نکات و راه‌حل‌های رایج برای مبتدیان

🟢 سوال :

‏چگونه می‌توان از پیچیده شدن بیش از حد منطق برنامه در مراحل اولیه جلوگیری کرد؟

گزینه ۱:
‏نوشتن تمام کد در یک تابع بزرگ

گزینه ۲:
‏شکستن مسئله به زیرمسئله‌های کوچکتر و نوشتن توابع جداگانه برای هر کدام

گزینه ۳:
‏استفاده از تعداد زیادی متغیر سراسری

گزینه ۴:
‏اجتناب از استفاده از توابع و ساختارهای کنترلی



🔵 گزینه صحیح: 2

🟢 توضیح :

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

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
‏حلقه foreach در C# ابزاری قدرتمند برای پیمایش عناصر یک مجموعه (مانند آرایه‌ها، لیست‌ها، یا دیکشنری‌ها) است. این حلقه به شما اجازه می‌دهد تا بدون نیاز به مدیریت دستی ایندکس، به هر عنصر از مجموعه دسترسی پیدا کنید.

‏مزیت کلیدی foreach: سادگی و خوانایی کد. وقتی هدف شما فقط دسترسی به تک‌تک عناصر است، foreach انتخاب ایده‌آلی است.

‏سناریوی کاربردی: فرض کنید لیستی از نام مشتریان دارید و می‌خواهید پیام خوش‌آمدگویی برای هر کدام ارسال کنید.

‏List<string> customerNames = new List<string> { "علی", "رضا", "مریم" };

foreach (string name in customerNames)
{
‏ Console.WriteLine($"سلام، {name}! به ما خوش آمدید.");
}


‏در این مثال، حلقه foreach به طور خودکار روی هر نام در customerNames تکرار می‌شود و عملیات چاپ پیام را برای هر نام انجام می‌دهد.

‏همچنین می‌توانید از foreach برای پیمایش کلیدها یا مقادیر یک دیکشنری استفاده کنید:

Dictionary<int, string> productCodes = new Dictionary<int, string>
{
‏ { 101, "لپ‌تاپ" },
‏ { 102, "موس" }
};

‏// پیمایش کلیدها


https://t.me/csharp7
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین‌ و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:

🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏Blazor و Aspire، یه ترکیب جادویی!

‏باهم یه اپلیکیشن Blazor رو با .NET Aspire یکپارچه می‌کنیم.

‏مزایا:
‏* مدیریت و پیکربندی ساده‌تر
‏* دیپلوی سریع‌تر 🚀
‏* مقیاس‌پذیری بهتر

‏آموزش گام به گام تو راهه! 🤓

#dotnet #blazor #aspire

https://t.me/dotnet7ir
‏برای ساخت مسیر فایل کامل در C#، استفاده از متد Path.Combine() بهترین روش است. این متد به طور خودکار جداکننده‌های دایرکتوری مناسب (مانند \ در ویندوز یا / در لینوکس و macOS) را بین بخش‌های مسیر اضافه می‌کند و از بروز خطا به دلیل ناهماهنگی در جداکننده‌ها جلوگیری می‌کند.

‏این روش، مسیرهای نسبی و مطلق را نیز به درستی مدیریت می‌کند. به عنوان مثال، اگر

https://t.me/csharp7
🔵 کوییز #HTML

🟣 موضوع : ‏استفاده از تگ‌های HTML در ایجاد اسلایدر متنی

🟢 سوال :

‏اگر بخواهیم یک عنوان برای هر اسلاید متنی قرار دهیم، از کدام تگ‌های HTML می‌توان استفاده کرد؟

گزینه ۱:
`<p>`

گزینه ۲:
`<span>`

گزینه ۳:
‏`<h1>` تا `<h6>`

گزینه ۴:
`<small>`



🔵 گزینه صحیح: 3

🟢 توضیح :

‏تگ‌های عنوان (`<h1>` تا `<h6>`) برای نمایش عنوان هر اسلاید متنی با سطوح اهمیت مختلف مناسب هستند.

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

🟢 پایتون، هوش مصنوعی، یادگیری ماشین، سی ++، سی شارپ، دات نت، نود جی اس، جاوا اسکریپت، شبکه، علم داده، پایگاه داده، sql، nosql ، مهارت های ICDL، سیستم عامل، لینوکس، فتوشاپ، گرافیک، اندروید، جاوا، ساخت اپلیکیشن موبایل، ری اکت، جی کوئری، php و laravel، دروس رشته کامپیوتر، کنکور کامپیوتر و ...

عضو لیست جامع شوید:

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
‏C# Interactive یه REPL داخل ویژوال استودیوئه 💡.

‏میتونید تیکه کدای C# رو بدون نیاز به ساخت پروژه تست کنید. خیلی سریع و راحت! 🚀

‏از منوی View > Other Windows > C# Interactive بازش کنید.

‏دیگه لازم نیست یه پروژه کنسول الکی باز کنید تا یه خط کد رو امتحان کنید 😉.

https://t.me/csharp7
‏C# ⚡️: عملگر ??=

‏این عملگر مقداردهی اولیه تنبل (Lazy Initialization) انجام میده. یعنی فقط وقتی سمت چپ `null` باشه، مقدار سمت راست رو بهش اختصاص میده.

```csharp
string name = null;
‏name ??= "Unknown"; // name الان "Unknown" میشه

string title = "Mr.";
‏title ??= "Unknown"; // title همون "Mr." باقی میمونه
```

‏خیلی جاها تو کدنویسی به کار میاد 👌

https://t.me/csharp7
🔵 کوییز #SQL



آیا ORDER BY بر روی داده‌های NULL تأثیر خاصی دارد؟ 

A)
داده های NULL همیشه در ابتدا نمایش داده می‌شوند. 

B)
داده های NULL همیشه در انتها نمایش داده می‌شوند. 

C)
بستگی به پایگاه داده دارد (مثلاً در Oracle با NULLS FIRST یا NULLS LAST قابل تنظیم است). 

D)
داده های NULL حذف می‌شوند. 


پاسخ:
C)
بستگی به پایگاه داده دارد (مثلاً در Oracle با NULLS FIRST یا NULLS LAST قابل تنظیم است). 

توضیح: رفتار پیش‌فرض با NULLها در سیستم‌های مختلف متفاوت است. در برخی مانند MySQL، NULLها در مرتب‌سازی صعودی ابتدا می‌آیند. در PostgreSQL و Oracle می‌توان رفتار را مشخص کرد: 

ORDER BY column_name ASC NULLS LAST

   


💗 مطالب بعدی ما رو حتما دنبال کنید!



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
آدرس کانال اصلی:
https://t.me/success7ir ن
آدرس وبسایت:
https://tutorial24.ir/
💠 عضو جامع ترین کانال های توسعه فردی، روانشناسی و موفقیت شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

شامل موضوعات آموزشی زیر:

توسعه و رشد فردی
افزایش ثروت
هدف گذاری و مدیریت زمان
مهارت های اجتماعی، ارتباطی و فن بیان
روانشناسی و خودیاری
موفقیت
عادات موثر
سلامت و تغذیه سالم
موفقیت شغلی
عبارات تاکیدی
مدیریت اضطراب و خشم
روان درمانی CBT و ACT
شخصیت شناسی و تحلیل روانشناسی
انگیزشی
کودک درون
تکنیک های NLP
یوگا
افزایش حافظه
مدیتیشن
موفقیت تحصیلی
مطالعه موثر
افزایش اعتماد به نفس
افزایش تمرکز
تفکر مثبت
افزایش خلاقیت
نقل قول های انگیزشی

با کلیک بر روی لینک زیر عضو تمامی این کانال ها شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
‏در زبان C#، برای تصمیم‌گیری بر اساس مقادیر مختلف، دو ساختار اصلی داریم: if-else if-else و switch-case.

‏دستور if-else if-else:
‏این ساختار برای بررسی شرط‌های متعدد و اجرای بلوک کد مربوط به اولین شرطی که برقرار است، استفاده می‌شود. انعطاف‌پذیری بالایی دارد و می‌تواند شرط‌های پیچیده و عملگرهای منطقی را پوشش دهد.

‏مثال:
int score = 75;
if (score >= 90)
{
Console.WriteLine("Grade: A");
}
else if (score >= 80)
{
Console.WriteLine("Grade: B");
}
else if (score >= 70)
{
Console.WriteLine("Grade: C");
}
else
{
Console.WriteLine("Grade: D");
}


‏مزایا if-else if-else:
‏- قابلیت بررسی شرط‌های پیچیده با استفاده از عملگرهای منطقی (&&, ||, !).
‏- انعطاف‌پذیری در تعیین محدوده‌های مقداری (مثلاً score >= 70).

‏معایب if-else if-else:
‏- در صورت داشتن شرط‌های زیاد، خوانایی کد ممکن است کاهش یابد.
‏- برای مقایسه یک متغیر با مقادیر ثابت متعدد، ممکن است بهینه نباشد.

---

‏دستور switch-case:
‏این ساختار برای مقایسه یک متغیر یا عبارت با مجموعه‌ای از مقادیر ثابت (case) استفاده می‌شود. در صورت تطابق، بلوک کد مربوط به آن case اجرا می‌شود. switch-case معمولاً خواناتر از if-else if-else برای مقایسه با مقادیر ثابت است.

‏مثال:
char grade = 'B';
switch (grade)
{
case 'A':
Console.WriteLine("Excellent!");
break;
case 'B':
Console.WriteLine("Good job!");
break;
case 'C':
Console.WriteLine("Pass.");
break;
case 'D':
Console.WriteLine("Needs improvement.");
break;
default:
Console.WriteLine("Invalid grade.");
break;
}


‏مزایا switch-case:
‏- خوانایی بهتر کد در مواقعی که یک متغیر با چندین مقدار ثابت مقایسه می‌شود.
‏- در برخی موارد، ممکن است کارایی بهتری نسبت به زنجیره‌ای طولانی از if-else if داشته باشد، زیرا کامپایلر می‌تواند آن را به ساختارهای بهینه‌تری تبدیل کند.
‏- استفاده از default برای پوشش مقادیری که در caseها تعریف نشده‌اند.

‏معایب switch-case:
‏- محدود به مقایسه با مقادیر ثابت است و نمی‌تواند شرط‌های پیچیده یا محدوده‌های مقداری را مستقیماً بررسی کند (مگر با ترفندهایی که خوانایی را کم می‌کند).
‏- هر case باید با دستور break (یا goto) خاتمه یابد تا از fall-through (اجرای case بعدی) جلوگیری شود، که فراموش کردن آن یک خطای رایج است.

‏نتیجه‌گیری:
‏- زمانی که نیاز به بررسی شرط‌های پیچیده، محدوده‌های مقداری یا عملگرهای منطقی دارید، if-else if-else انتخاب بهتری است.
‏- هنگامی که یک متغیر را با چندین مقدار ثابت مقایسه می‌کنید، switch-case خواناتر و اغلب بهینه‌تر است. 💡
‏- هر دو ساختار ابزارهای قدرتمندی برای کنترل جریان برنامه در C# هستند. 🚀

https://t.me/csharp7
‏C#‎ دو راه برای مدیریت داده‌ها در برنامه‌های چندنخی داره: `Channel` و `BlockingCollection`.

‏`Channel` برای سناریوهای producer/consumer با کارایی بالا مناسبه، چون سربار کمتری داره. ⚡️

‏`BlockingCollection` امکانات بیشتری مثل محدود کردن ظرفیت و پشتیبانی از الگوهای مختلف producer/consumer رو ارائه میده. ⚙️

‏انتخاب بین این دو بستگی به نیازهای خاص پروژه داره. 🤔

https://t.me/csharp7
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین‌ و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:

🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
‏در تدوین Native AOT با C#، اگر نوعی `partial` دارید که در یک اسمبلی تعریف شده و در اسمبلی دیگری استفاده می‌شود، کامپایلر به صورت پیش‌فرض نمی‌تواند تمام اعضای آن را ببیند.

‏برای رفع این مشکل، از `TrimMode.Required` در اسمبلی تعریف‌کننده `partial` استفاده کنید تا مطمئن شوید تمام اعضای مورد نیاز در فرآیند تدوین نهایی گنجانده شوند. ⚙️🧩 این کار از حذف تصادفی اعضا در فرآیند Trim جلوگیری می‌کند.

https://t.me/csharp7
‏دانستنی C#‎:

‏`nameof` در C# 11 از تایپ‌های جنریک unbound هم پشتیبانی می‌کند. یعنی دیگه لازم نیست حتماً یک تایپ concrete بهش پاس بدید.

```csharp
nameof(List<>) // "List"
nameof(Dictionary<,>) // "Dictionary"
```

‏اینطوری اسم تایپ رو بدون دردسر و با امنیت تایپ بالا به دست میارید. 👌

https://t.me/csharp7
💡 نکته #NoSQL

🟣 موضوع : ‏Full‑Text Search در پایگاه‌های NoSQL

نکته :

‏اگه اطلاعاتتون خیلی زیاد هست، از تکنیک‌های تقسیم‌بندی (Sharding) استفاده کنید تا سرعت جستجو حفظ بشه. 📦


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
‏C# 17 یه قابلیت جالب داره: Frozen Collections. 🧊

‏این کالکشن‌ها بعد از ایجاد، دیگه قابل تغییر نیستن.

‏مزیتش چیه؟ 🚀
‏بهبود کارایی و امنیت Thread-safe. دیگه نگران تغییر ناخواسته داده‌ها نباشید!

‏برای ساختنشون هم از متد ToFrozenDictionary() یا ToFrozenSet() استفاده کنید. 👌

https://t.me/csharp7
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

🟢 پایتون، هوش مصنوعی، یادگیری ماشین، سی ++، سی شارپ، دات نت، نود جی اس، جاوا اسکریپت، شبکه، علم داده، پایگاه داده، sql، nosql ، مهارت های ICDL، سیستم عامل، لینوکس، فتوشاپ، گرافیک، اندروید، جاوا، ساخت اپلیکیشن موبایل، ری اکت، جی کوئری، php و laravel، دروس رشته کامپیوتر، کنکور کامپیوتر و ...

عضو لیست جامع شوید:

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk