کدهک
1.95K subscribers
1.29K photos
7 videos
1 file
672 links
آموزشگاه تخصصی دات نت

https://codehaks.com

لینکدین :
https://www.linkedin.com/in/codehaks

یوتیوب:
https://www.youtube.com/@codehaksfa

ارتباط با مدیر :
Admin: @codehak
Email: ghods.hakim@hotmail.com
call: 09380146555
Download Telegram
آموزش AutoMapper در ASP NET Core

اتومپر ابزاری برای مپ کردن (کپی کردن فیلد به فیلد) یک شی به شی دیگر است. این ابزار سالهاست که در بسیاری از پروژه ها استفاده میشود. در این ویدیو به آموزش استفاده از AutoMapper در یک پروژه ASP NET Core می پردازیم.


https://codehaks.com/go/mpz
Forwarded from کدهک
نگاهی به Async/Await در پروژه های وب

در این ویدیو به بررسی مکانیزم Threading در ASP NET Core می پردازیم و درباره ConfigureAwait و Synchronization Context صحب می کنیم.

https://codehaks.com/video/107
Forwarded from DotNetZoom (Ali)
🔰 یک نکته پرفرمنسی درباره Logging

🔸استفاده از تامین کننده Console برای Logging در حین ارائه نهایی (Production) به شدت باعث کند شدن و کاهش کارآیی برنامه خواهد شد. بهتر است این تامین کننده را صرفا در محیط Development تنظیم کنید (مانند تصویر)

🔹اگر از WebHost.CreateDefaultBuilder استفاده می‌کنید، به صورت پیش‌فرض سه تامین کننده Console و Debug و EventSource ثبت خواهند شد پس لازم است ابتدا آن ها را توسط متد ClearProviders حذف کنید
#PerformanceTuning
_________
@DotNetZoom
آیا برای شروع یادگیری ASP NET Core استفاده از داکیومنتهای مایکروسافت را پیشنهاد می کنید؟
Anonymous Poll
57%
بله
43%
خیر
لوگ کردن رویدادها می تواند در رفع باگها و رهگیری خطاهای برنامه کمک زیادی کند. با استفاده از کتابخانه Serilog می توانید داده های لوگ را به روشهای مختلف نمایش دهید یا در انواه دیتابیس ها ذخیره کنید. در این ویدیو نحوه اضافه کردن Serilog به یک پروژه ASP NET Core و ثبت اطلاعات لوگ در دیتابیس SQL Server آموزش داده میشود.

https://codehaks.com/go/pno
به مناسبت عید غدیر تمدید شد...

تخفیف 50 درصدی ویژه عید قربان

به مناسبت عید قربان می توانید همه دوره های آموزشی کدهک را با تخفیف 50 درصد تهیه کنید.

کد تخفیف : qorban

https://codehaks.com/shop
در این دوره به آموزش Entity Framework می پردازیم. کار را با یک پروژه کاملا خالی شروع می کنیم و سپس کتابخانه های لازم برای کار با روش Code First در Entity Framework را به آن اضافه می کنیم. گام به گام پیش میرویم تا دیتابیس ایجاد کنیم و اطلاعات را در آن ذخیره کنیم.


https://codehaks.com/go/efk
رقابت بسیار نزدیک پرفورمنس gRPC در دات نت 5 در کنار RUST و ++C و Go

آدرس بنچمارک:
https://codehaks.com/go/ykn
در بسیاری از پروژه های وب نیاز به نمایش Select داریم که داده های آن از دیتابیس خوانده میشود. در این ویدیو به نحوه پیاده سازی آن در ASP .NET Core و Razor Page آشنا میشویم.


https://codehaks.com/go/pzo
Forwarded from کدهک
با استفاده از ابزار Health Checks در ASP NET Core می توانید سلامتی اپلیکیشن خود را به دیگر سرویس ها اطلاع دهید. این ابزار امکان میدهد مواردی مانند اتصال به اینترنت، بالا بودن سرور دیتابیس یا دسترسی به سرویس پیامک و ... را چک کنیم و در صورت وجود مشکل به دیگران اطلاع دهیم.

https://codehaks.com/go/tpk
آموزش RabbitMQ و پیاده سازی الگوی Messaging

در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.

https://codehaks.com/go/fpw
Forwarded from DotNetZoom (Ali)
افزایش امنیت JWT توسط Refresh Token در ASP NET Core

وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!

1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔

2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕

3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨

🔰پس راه حل چیه؟

🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)

🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره

🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم

🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟

🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه

🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)

❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند

1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o


___________
@DotNetZoom
Forwarded from کدهک
در این ویدیو یک پروژه ی دمو با دیتابیس RavenDB در ASP Core پیاده می کنیم.

https://tinyurl.com/y5z3ak2n
ارتباط با اکسل در دات نت

در این ویدیو به آموزش نحوه کار با COM Interop در dot NET Core می پردازیم. با استفاده از Component Object Model میتوانید محیط اکسل را از طریق کد سی شارپ کنترل کنید. ورکبوک جدید ایجاد کنید. درون سلولها محتوایی بنویسید و به صورت فایل ذخیره کنید.

https://codehaks.com/go/kve
آشنایی با ZeroMQ

در این ویدیو به معرفی ZeroMQ می پردازیم و نحوه استفاده از آن را در NET Core بررسی می کنیم. برای استفاده از این ابزار باید پکیچ NetMQ را به پروژه دات نت اضافه کنید و سپس می توانید از ZeroMQ برای ارسال پیام بین چند سرویس یا اپلیکیشن استفاده کنید.

https://codehaks.com/go/pju
Forwarded from کدهک
دوره آموزش کار با Collection ها در سی شارپ و ASP NET Core

پخش در یوتوب :

https://kutt.it/rJvT82
Forwarded from DotNetZoom (Ali)
استفاده از پروکسی داخل پروژه های دات نت Framework Full
https://goo.gl/4JbeYW

خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)

تو NetFramework Full به صورت زیر عمل میکردیم
WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { UseDefaultCredentials = true };

- فیلد BypassOnLocal مشخص میکنه که درخواست های local (محلی) از طریق پروکسی عبور نکنه و مستقیما ارسال بشه.

- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.

- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.

- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.

WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { Credentials = new NetworkCredential("username", "password") };

ست کردن مقدار WebRequest.DefaultWebProxy باعث میشه پروکسی پیشفرض پروژه تغییر کنه و از این به بعد تمام درخواست ها (به جز Local به دلیل Bypass در این مثال) از طریق پروکسی ارسال و دریافت بشه.

همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
<configuration>
<system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:9050" bypassonlocal="true" usesystemdefault="true"/>
</defaultProxy>
</system.net>
</configuration>

اما این روش (DefaultProxy) باعث میشه درخواست های کل سیستم از طریق پروکسی ارسال و دریافت بشه
درصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
WebProxy proxy = new WebProxy("http://127.0.0.1:9050",true);
WebRequest request = WebRequest.Create("http://www.contoso.com");
request.Proxy = proxy;


_______________
@DotNetZoom
آموزش MongoDb در ASP.NET Core - قسمت اول

دیتابیس MongoDb از نوع NoSQL است که اطلاعات را صورت اسناد ذخیره می کند. این دیتابیس در سالهای اخیر محبوبیت زیادی پیدا کرده و در بسیاری از پروژه های کوچک و بزرگ مورد استفاده قرار گرفته است. در این مجموعه به آموزش پیاده سازی وب سایت ASP.NET Core روی دیتابیس MongoDb می پردازیم.

https://codehaks.com/go/mng1
Forwarded from کدهک
بهینه سازی GC در دات نت

در سی شارپ پاکسازی حافظه به عهده GC است. در این ویدیو به بررسی اثر منفی استفاده از Large Object Heap در پرفورمنس می پردازیم و سعی می کنیم از آن دوری کنیم.

https://codehaks.com/go/loh
آموزش MongoDb در ASP.NET Core قسمت دوم

در این قسمت به ادامه پیاده سازی پروژه می پردازیم و قابلیت ویرایش و حذف را به آن اضافه می کنیم.

https://codehaks.com/go/mng2
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
آیا در همه پروژه هایی که برنامه نویس ها اینقدر به خودشان زحمت میدن لایه بندی ها و پیاده سازی الگوهایی مثل Unit of Work و Repository و ... میدن و در حین انجامش کلی درگیری های مختلف پیدا می کنند، آیا وجود این همه لایه و دردسرهای تحمیلی حاصله ضرورت داره؟
Final Results
12%
من همیشه، حتی وقتی لازم نیست لایه بندی ها رو اجرا می کنم
32%
مزیت های لایه بندی بیشتر از تحمل دردسرهای اجرایش است.
25%
برنامه نویس ها اکثرا بخاطر خیلی حرفه ای جلوه دادن کارشون این دردسرها رو می پذیرند.
31%
هیچکام، مشاهده نتایج