‫۷ سال و ۱ ماه قبل، سه‌شنبه ۱۰ مرداد ۱۳۹۶، ساعت ۲۳:۲۷
یک نکته‌ی تکمیلی

معادل قطعه کد ذیل که مخصوص ASP.NET MVC 5x است:
var request = JsonConvert.DeserializeObject<DataSourceRequest>(
                requestMessage.RequestUri.ParseQueryString().GetKey(0)
            );
در ASP.NET Core به صورت زیر می‌باشد (روش استخراج کل کوئری استرینگ به صورت خام و تبدیل آن به یک رشته‌ی JSON معتبر برای Deserialize شدن):
var rawQueryString = this.HttpContext.Request.QueryString.ToString();
// PM> Install-Package Microsoft.AspNetCore.WebUtilities
var rawQueryStringKeyValue = QueryHelpers.ParseQuery(rawQueryString).FirstOrDefault();
var dataString = Uri.UnescapeDataString(rawQueryStringKeyValue.Key);

var request = JsonConvert.DeserializeObject<DataSourceRequest>(dataString);
‫۷ سال و ۲ ماه قبل، شنبه ۷ مرداد ۱۳۹۶، ساعت ۱۶:۲۴
سؤال: چرا به روز رسانی اطلاعات کاربر، سبب logout او می‌شود؟
در ASP.NET Identity‌، جدول کاربران دارای فیلد SecurityStamp است و با مقایسه‌ی مقدار آن با مقدار موجود در کوکی کاربر، مشخص می‌کند آیا اطلاعات کاربری در سمت سرور تغییر کرده‌است یا خیر؟ اگر بله، این کاربر مجبور به لاگین مجدد خواهد شد.
 OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User>(
            validateInterval: TimeSpan.FromMinutes(0),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
اینکه چه زمانی بررسی مجدد SecurityStamp موجود در کوکی کاربر صورت می‌گیرد، توسط پارامتر validateInterval مشخص می‌شود. در اینجا این پارامتر به صفر تنظیم شده‌است. یعنی اطلاعات کاربر در درخواست بعدی، مجددا تعیین اعتبار می‌شود.
تغییر اطلاعات فیلد SecurityStamp یا با فراخوانی مستقیم userService.UpdateSecurityStampAsync انجام می‌شود یا متدهای ذیل هم به صورت توکار شامل این فراخوانی در پشت صحنه هستند:
UserManager.CreateAsync
UserManager.RemovePasswordAsync
UserManager.UpdatePassword
UserManager.RemoveLoginAsync
UserManager.ChangePhoneNumberAsync/SetPhoneNumberAsync
UserManager.SetTwoFactorEnabledAsync
UserManager.SetEmailAsync
یعنی هر نوع تغییری در اطلاعات کاربر، سبب logout او خواهد شد.
‫۷ سال و ۲ ماه قبل، پنجشنبه ۵ مرداد ۱۳۹۶، ساعت ۱۵:۳۸
یک نکته‌ی تکمیلی
پیش‌فرض حداکثر زمان بارگذاری افزونه‌ی #C به عدد کوچکی تنظیم شده‌است و ممکن است پس از بازکردن پروژه، فعال شدن این افزونه را مشاهده نکنید. برای رفع این مشکل به File->Preferences->Settings مراجعه کرده و مقدار omnisharp.projectLoadTimeout را جستجو و سپس تغییر دهید.
‫۷ سال و ۲ ماه قبل، شنبه ۳۱ تیر ۱۳۹۶، ساعت ۱۴:۰۷
نکته‌ای در مورد به روز رسانی خودکار بسته‌های npm

ابتدا بسته‌ی npm-check-updates را نصب کنید.
npm install npm-check-updates -g
سپس برای مشاهده‌ی نگارش‌های جدید مهیا می‌توان دستور ذیل را صادر کرد:
ncu
و برای به روزرسانی خودکار به این نگارش‌ها، دستور ذیل را صادر کنید:
ncu -u
‫۷ سال و ۲ ماه قبل، چهارشنبه ۲۸ تیر ۱۳۹۶، ساعت ۱۸:۴۰
دو افزونه‌ی تایپ‌اسکریپتی مفید دیگر
- MoveTS کار تغییرنام و یا تغییر مکان فایل‌های ts. را با اصلاح ارجاعات به آن‌ها ساده‌تر می‌کند.
- TypeScript Hero می‌تواند برای حذف ارجاعاتی که در ماژول جاری استفاده نشده‌اند، بکارگرفته شود. همچنین تجربه‌ی کار با TSLint را نیز بهبود می‌بخشد.
// file -> preferences -> settings
"typescriptHero.resolver.organizeOnSave": true,
‫۷ سال و ۲ ماه قبل، چهارشنبه ۲۸ تیر ۱۳۹۶، ساعت ۱۶:۵۹
- یک نمونه استفاده‌ی‌از آن خاصیت public، در متد GetLastUserPasswordChangeDateAsync هست که از GetShadowPropertyValue استفاده می‌کند.
- برای سایر حالات از نکات مطرح شده‌ی در مطلب خواص سایه‌ای یا Shadow properties استفاده کنید و بجای ذکر رشته‌ها، می‌توان از خواص public static readonly string این کلاس در متد EF.Property استفاده کرد تا Refactoring friendly شود (هدف اصلی این خواص عمومی).
var items = context.Persons
             .Where(x => EF.Property<DateTimeOffset?>(x, AuditableShadowProperties.CreatedDateTime) <= DateTimeOffset.UtcNow).ToList();