‫۳ سال و ۲ ماه قبل، جمعه ۴ تیر ۱۴۰۰، ساعت ۱۹:۳۰
چه خطایی دریافت کردید؟ در مرورگر دکمه‌ی F12 را فشار دهید تا developer tools آن باز شود. سپس در برگه‌ی console آن، لیست خطاها ذکر می‌شوند و یا در برگه‌ی network هم یکسری از درخواست‌ها با رنگ قرمز مشخص می‌شوند. اگر بر روی هر کدام دوبار کلیک کنید، جزئیات آن‌ها نمایش داده خواهند شد و یا اگر در همینجا response را هم مشاهده کنید، ممکن است به همراه خروجی خطای سمت سرور هم باشد. به علاوه اگر برنامه را از طریق دستور dotnet run اجرا می‌کنید، کنسول باز شده، خطاهای سمت سرور را لاگ می‌کند و یا اگر از ادیتور خاصی استفاده می‌کنید، خطاهای مرتبط در برگه‌ی debug آن‌ها ظاهر می‌شوند.
یک نکته‌ی تکمیلی: Blazor، حساس به بزرگی و کوچکی حروف است
در حین تعاریف المان‌های فرم‌ها ممکن است بجای InputCheckbox بنویسیم InputCheckBox؛ در یک چنین حالتی خطای کامپایلر بسیار عمومی زیر را دریافت خواهیم کرد:
The attribute names could not be inferred from bind attribute 'bind-value'. 
Bind attributes should be of the form 'bind' or 'bind-value' along with their 
corresponding optional parameters like 'bind-value:event', 'bind:format' etc.
دلیل دیگر آن می‌تواند فراموش کردن یک using@ باشد. اگر کامپوننتی در فضای نام خاصی تعریف شده، ذکر using آن نباید فراموش شود. در کل اگر Blazor نتواند المان تعریف شده را شناسایی کند (به علت اشتباه تایپی و یا فراموش کردن ذکر فضای نام آن)، خطای فوق صادر می‌شود.
‫۳ سال و ۲ ماه قبل، شنبه ۲۲ خرداد ۱۴۰۰، ساعت ۱۲:۳۶
یک نکته‌ی تکمیلی: امکان دیباگ کدهای Blazor در VSCode
برای دیباگ کدهای Blazor در VSCode فقط کافی است افزونه‌ی تکمیلی Microsoft.AspNetCore.Razor.VSCode.BlazorWasmDebuggingExtension را هم نصب کرد. پس از نصب آن، با فشردن دکمه‌ی F5، کار دیباگ شروع می‌شود. البته برای اولین بار نیاز دارد تا NET Runtime. را هم دریافت و نصب کند ... اما timeout پیش‌فرض آن فقط 2 دقیقه‌است که سبب خواهد شد نتوانید در طی این مدت، این بسته را دریافت کنید. به همین جهت باید تنظیم زیر را به Visual Studio Code settings اضافه کرد:
{
    "dotnetAcquisitionExtension.installTimeoutValue": 200000
}
نگارش کامل و صحیح getBase64WithoutPadding به این صورت هست:
        private static byte[] getBase64WithoutPadding(string base64)
        {
            // From:
            // https://github.com/dvsekhvalnov/jose-jwt/blob/master/jose-jwt/util/Base64Url.cs#L16
            // https://github.com/auth0/jwt-decode/blob/master/lib/base64_url_decode.js#L15
            // https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/0665af62cc58a28ebe184dd97f4d018f84e1d83d/src/Microsoft.IdentityModel.Tokens/Base64UrlEncoder.cs#L175

            base64 = base64.Replace('-', '+'); // 62nd char of encoding
            base64 = base64.Replace('_', '/'); // 63rd char of encoding
            switch (base64.Length % 4) // Pad with trailing '='s
            {
                case 0: break; // No pad chars in this case
                case 2: base64 += "=="; break; // Two pad chars
                case 3: base64 += "="; break; // One pad char
                default: throw new ArgumentOutOfRangeException(nameof(base64), "Illegal base64url string!");
            }
            return Convert.FromBase64String(base64); // Standard base64 decoder
        }