‫۵ سال و ۴ ماه قبل، چهارشنبه ۱۸ اردیبهشت ۱۳۹۸، ساعت ۱۷:۳۲
«... در این سیستم از AngularCLI استفاده نشده است ...»
مشکل همینجا است! اگر از Angular CLI استفاده کنید، در پشت صحنه تمام مباحث bundling & minification و همچنین حذف کدهای مرده (استفاده نشده) را به صورت خودکار توسط Webpack، پلاگین‌های آن و کامپایلر مورد استفاده، انجام می‌دهد (و شما نیازی به تنظیم اضافه‌تر و یا دستی برای این مورد ندارید). در کل روش استاندارد کار با Angular با راه اندازی یک پروژه‌ی Angular CLI شروع می‌شود. بنابراین بهتر است آرام آرام کارتان را به این سیستم منتقل کنید (روش کار با System JS که روزهای اول ارائه‌ی Angular مطرح شده بود (همان تصویری که ارسال کردید)، الان دیگر مطلقا استفاده نمی‌شود). همین سری Angular CLI را از قسمت اول آن پیگیری کنید، برای شروع کفایت می‌کند.
اگر به قسمت «یک مثال: ساخت برنامه‌ی مثال قسمت چهارم - تنظیمات مسیریابی در حالت prod » مطلب جاری دقت کنید، یک تصویر خروجی ذیل آن ارسال شده‌است.

در این خروجی، کمتر از 5 فایل js قابل مشاهده هستند که حاصل bundling & minification نهایی و تمام فایل‌های برنامه، توسط Angular CLI هستند.
به علاوه Kendo UI یک نگارش مخصوص Angular را دارد که برای آن از صفر بازنویسی شده‌است و کاملا با Angular CLI سازگار است. همچنین مجموعه کامپوننت‌های سبک‌تر و بهتر دیگری هم برای Angular وجود دارند.
- فقط Implicit flow
- نمی‌توان و توصیه هم نمی‌شود.
البته خود Identity server، کتابخانه‌ی کلاینت جاوا اسکریپتی/تایپ‌اسکریپتی هم دارد که بحث ویژه‌ای را تحت عنوان «automatic Silent Renew» پشتیبانی می‌کند و ... خارج است از موضوع این سری.
‫۵ سال و ۴ ماه قبل، سه‌شنبه ۱۷ اردیبهشت ۱۳۹۸، ساعت ۱۵:۴۷
یک نکته‌ی تکمیلی: ارتقاء به ASP.NET Core 2.2
در ASP.NET Core 2.2، امکان ترکیب AllowAnyOrigin و AllowCredential با هم وجود ندارد و در این حالت خطای ذیل را دریافت خواهید کرد:
Access to XMLHttpRequest at url from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
GET http://localhost:4200/null 404 (Not Found)
راه حل (برای حالت توسعه):
app.UseCors(builder => builder
                .AllowAnyHeader()
                .AllowAnyMethod()
                .SetIsOriginAllowed((host) => true)
                .AllowCredentials()
            );

البته همانطور که در مطلب فوق نیز عنوان شد، از لحاظ امنیتی انتخاب متد ()AllowAnyOrigin و یا SetIsOriginAllowed((host) => true) صرفا برای حالت توسعه باید استفاده شوند. در حالت ارائه‌ی نهایی، هر کدام از این دو که حضور نداشته باشند، تنظیم انجام شده با ()AllowCredentials بدون مشکل کار خواهد کرد:
        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder
                  .AllowAnyMethod()
                  .AllowAnyHeader()
                  .WithOrigins("http://localhost:4200")
                  .AllowCredentials()
            .Build());
        });
و بعد هم:
app.UseCors("CorsPolicy");
‫۵ سال و ۴ ماه قبل، چهارشنبه ۱۱ اردیبهشت ۱۳۹۸، ساعت ۱۸:۲۸
- جائیکه قرار است Roles یا Claims با هم «And» شوند از روش متداول استفاده کنید:
options.AddPolicy("ElevatedRights", 
   policyBuilder => policyBuilder.RequireRole("Administrator", "PowerUser", "BackupAdministrator"));
حتی ذکر زنجیروار این‌ها هم یعنی «And»:
policyBuilder => policyBuilder
    .RequireClaim("VIPNumber")
    .RequireClaim("EmployeeNumber")
    .RequireRole("CEO"));
- جائیکه قرار است «Or» شوند یا از RequireAssertion هنگام تعریف یک Policy جدید استفاده کنید:
services.AddAuthorization(options =>
{
    options.AddPolicy(
        "CanAccessVIPArea",
        policyBuilder => policyBuilder.RequireAssertion(
            context => context.User.HasClaim(claim => 
                           claim.Type == "VIPNumber" 
                           || claim.Type == "EmployeeNumber")
                        || context.User.IsInRole("CEO"))
        );
});
- و یا برای حالت‌های پیچیده‌تر، AuthorizationHandler ای را که در قسمت بعدی توضیح داده شده، پیاده سازی کنید.
‫۵ سال و ۴ ماه قبل، چهارشنبه ۱۱ اردیبهشت ۱۳۹۸، ساعت ۱۴:۰۳
اسکریپت به روز رسانی شده‌ی مطلب جاری برای فعالسازی Roslynator در VSCode
روش استفاده: یک پوشه‌ی خالی و مشخص را در جائی ایجاد کنید. سپس فایل ps1 فوق را در آن کپی و اجرا کنید (کلیک راست بر روی آن و انتخاب گزینه‌ی Run With PowerShell). پس از آن اگر VSCode را اجرا کنید، چنین صحنه‌ای را مشاهده خواهید کرد:

‫۵ سال و ۴ ماه قبل، دوشنبه ۹ اردیبهشت ۱۳۹۸، ساعت ۱۹:۰۵
یک نکته‌ی تکمیلی: چگونه پس از نصب SDK 3x جدید، بتوانیم همان پروژه‌ی قبلی را بدون به روز رسانی یا هیچگونه تغییری در آن، باز هم استفاده کنیم؟

با توجه به اینکه امضای یکسری از اینترفیس‌های نگارش 3x با 2x یکی نیست (مانند ILookupNormalizer)، پس از نصب SDK 3x، دیگر قادر به اجرای برنامه‌های 2x خود نخواهید شد؛ چون پروژه‌های NET Core. همواره از آخرین نگارش SDK نصب شده استفاده می‌کنند. برای قفل کردن شماره SDK یک Solution به نگارش 2x به صورت زیر عمل کنید:
dotnet --list-sdks
dotnet new globaljson --sdk-version 2.2.106
دستور اول لیست SDKهای نصب شده را نمایش می‌دهد و دستور دوم یک فایل global.json جدید را بر اساس شماره‌ای که از طریق اجرای دستور اول یافته‌اید، تولید می‌کند. این فایل باید در ریشه‌ی Solution قرار گیرد.
‫۵ سال و ۴ ماه قبل، یکشنبه ۸ اردیبهشت ۱۳۹۸، ساعت ۱۹:۰۳
این شماره‌ای که ارسال کردید «core\3.0.0-preview-18579-0056\lib» مربوط به 5 ماه قبل هست و با نگارش «3 پیش‌نمایش 4» ای که عنوان کردید سازگاری ندارد. اگر مطمئن هستید که SDK درستی را نصب کردید، نیاز است تمام اسمبلی‌های تمام پروژه‌ها را هم یک‌دست کنید (پس از اصلاح دستی تمام TargetFramework‌های موجود).
dotnet tool update --global dotnet-outdated
dotnet outdated -u