یک نکته‌ی تکمیلی: روش محافظت از کلیدهای سیستم DataProtection با یک مجوز SSL

اگر برنامه‌های ASP.NET Core را اجرا کرده باشید، عموما در ابتدای آن یک پیام محافظت نشده بودن کلیدهای سیستم DataProtection را لاگ می‌کند. برای رفع این مشکل می‌توان این مراحل را طی کرد:
الف) نیاز به یک مجوز SSL داریم که دارای private key هم باشد.
برای این منظور سه دستور زیر را صادر کنید تا یک فایل pfx مناسب سیستم DataProtection تولید شود:
"C:\Program Files\Git\usr\bin\openssl.exe" genrsa -out private.key 2048
"C:\Program Files\Git\usr\bin\openssl.exe" req -new -x509 -key private.key -out publickey.cer -days 1398
"C:\Program Files\Git\usr\bin\openssl.exe" pkcs12 -export -out idp.pfx -inkey private.key -in publickey.cer
این دستورات از openssl.exe برنامه‌ی Git for windows استفاده می‌کنند. اگر فایل pfx نهایی دارای private key نباشد (روش فوق این مشکل را ندارد)، حین استفاده‌ی از آن در برنامه، با خطاهایی مانند «کلید یافت نشد» و یا «access denied» مواجه می‌شوید.

ب) خواندن فایل pfx در برنامه
روش خواندن فایل‌های pfx به صورت زیر است:
private static X509Certificate2 loadCertificateFromFile(string filePath, string password)
{
    // NOTE:
    // You should check out the identity of your application pool and make sure
    // that the `Load user profile` option is turned on, otherwise the crypto susbsystem won't work.

    // For decryption the certificate must be in the certificate store. It's a limitation of how EncryptedXml works.
    using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
    {
      store.Open(OpenFlags.ReadWrite);
      store.Add(new X509Certificate2(filePath, password, X509KeyStorageFlags.Exportable));
    }

    return new X509Certificate2(
            filePath,
            password,
            keyStorageFlags: X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet
                             | X509KeyStorageFlags.Exportable);
}
دو نکته در اینجا مهم هستند: اگر از IIS استفاده می‌کنید، روشن کردن گزینه‌ی «Load user profile» را در Application pool برنامه فراموش نکنید، تا سیستم RSA به خوبی کار کند. همچنین در اینجا قسمت store.Add الزامی است. از این جهت که ASP.NET Core برای کار decryption کلیدها، فقط به اطلاعات X509Store سیستم مراجعه می‌کند و کاری به فایل pfx ما ندارد.

ج) معرفی مجوز تولید شده به سیستم
دراینجا آخرین مرحله، ذکر متد ProtectKeysWithCertificate به همراه مجوزی است که تولید کردیم:
services
   .AddDataProtection()
   .SetDefaultKeyLifetime(...)
   .SetApplicationName(...)
   .ProtectKeysWithCertificate(loadCertificateFromFile("path ...", "123"));
اکنون اگر برنامه را اجرا کنید، از فایل pfx تولیدی، برای رمزنگاری کلیدهای سیستم DataProtection استفاده خواهد شد.
‫۴ سال و ۱۱ ماه قبل، دوشنبه ۱۵ مهر ۱۳۹۸، ساعت ۲۲:۲۵
اگر CORS فعال نباشد (در صورت نیاز)، هیچ درخواستی به اکشن متدی نخواهد رسید و پیش از پردازش برگشت می‌خورند.
‫۴ سال و ۱۱ ماه قبل، یکشنبه ۱۴ مهر ۱۳۹۸، ساعت ۱۶:۴۰
- فقط Unobtrusive Ajax را بر روی فرم خود فعال کنید. در نسخه‌ی اخیر افزونه jquery-ajax-unobtrusive، ارسال فایل با استفاده از FormData نیز به صورت توکار پشتیبانی می‌شود و نیاز به تنظیمی خاص، یا کد نویسی اضافه‌تری ندارد.
- برای افزونه‌های دیگر هم از همان قطعه کد مایکروسافت برای تکمیل آن‌ها ایده بگیرید.
‫۴ سال و ۱۱ ماه قبل، یکشنبه ۱۴ مهر ۱۳۹۸، ساعت ۱۲:۴۷
یک نکته‌ی تکمیلی: معرفی ابزارهای محلی در NET Core 3.0.

تا پیش از NET Core 3.0.، ابزارهای NET Core. به عنوان NET Core Global Tools. شناخته می‌شدند. اما اگر به ازای پروژه‌های مختلف، بخواهیم از نگارش‌های مختلفی از این ابزارها استفاده کنیم، چطور؟ این مشکل با معرفی NET Core Local Tools. در NET Core 3.0. برطرف شده‌است.
برای کار با آن، ابتدا نیاز است فایل خالی manifest ای را تولید کرد:
dotnet new tool-manifest
که برای نمونه در مسیر config/dotnet-tools.json. پروژه‌ی جاری با محتوای زیر تولید می‌شود:
{
  "version": 1,
  "isRoot": true,
  "tools": {}
}
سپس می‌توان tools مدنظر را به این فایل اضافه کرد. مثلا ابزار Cake.Tool را به صورت محلی در آن نصب و ثبت کرد:
dotnet tool install Cake.Tool
که دستور فوق، فایل dotnet-tools.json پروژه را به صورت زیر ویرایش می‌کند:
{
  "version": 1,
  "isRoot": true,
  "tools": {
    "cake.tool": {
      "version": "0.34.1",
      "commands": [
        "dotnet-cake"
      ]
    }
  }
}
پس از آن دستورات کار با این ابزار، در پوشه‌ی پروژه‌ی جاری میسر می‌شوند و بدیهی است شماره نگارش این ابزار محلی نصب شده، در هر پروژه‌ای می‌تواند متفاوت باشد.

یک نکته: اگر مسیر config/dotnet-tools.json. را به سورس کنترل خود اضافه کردید، دیگران برای بازیابی و کار با آن، می‌توانند دستور زیر را اجرا کنند:
dotnet tool restore
‫۴ سال و ۱۱ ماه قبل، یکشنبه ۱۴ مهر ۱۳۹۸، ساعت ۱۲:۱۷
یک نکته‌ی تکمیلی: چگونه از چندین سیستم عامل برای اجرای ساخت و آزمایش برنامه استفاده کنیم؟
name: ASP.NET Core CI

on: [push]

jobs:
  build_and_test:
    runs-on: $
    strategy:
      matrix:
        os: [macOS-latest, ubuntu-latest, windows-latest]
    steps:
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1.2.0
      with:
        dotnet-version: 3.0.100
      if: matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest'
    - uses: actions/checkout@v1
    - name: Build with dotnet
      run: dotnet build ./src/Solution.sln --configuration Release
    - name: Test with dotnet
      run: dotnet test ./src/Solution.sln --configuration Release
matrix.os امکان تعریف چندین سیستم عامل را میسر می‌کند و سپس در قسمت if نوشته شده، بر اساس نوع سیستم عامل، NET Core. را نصب خواهد کرد؛ چون نگارش ویندوزی آن‌را به همراه دارد.
‫۴ سال و ۱۱ ماه قبل، شنبه ۱۳ مهر ۱۳۹۸، ساعت ۲۲:۴۷
jQuery خودش به صورت توکار بسیاری از قابلیت‌های LINQ را دارد. برای مثال معادل Where در آن grep.$ است و یا معادل Select، متد map.$ آن است. برای مثال کد #C زیر:
var maleNames = people
.Where(p => p.Sex == "M")
.Select(p => p.Name)
به صورت زیر توسط jQuery ترجمه می‌شود:
var maleNames = $.grep(people, function (p) { return p.Sex == 'M'; })
            .map(function (p) { return p.Name; });
- از برنامه‌ی Jexus Manager استفاده کنید تا این مراحل را با چند کلیک ساده در قسمت server certificates آن برای شما انجام دهد:
- اما برای IIS و محیط کاری، نیاز به مجوز واقعی (و نه self signed certificate) دارید؛ مانند: «مراحل تنظیم Let's Encrypt در IIS» 
- اگر شبکه داخلی ویندوزی است، نیاز خواهید داشت Root Certificate Authority را نصب و راه اندازی کنید.  
- و یا کلا نیاز به کار اجباری با SSL را می‌توانید به صورت زیر لغو کنید:
.AddOpenIdConnect("oidc", options =>
{
   options.RequireHttpsMetadata = false;
// ...

.AddIdentityServerAuthentication(options =>
{
   options.RequireHttpsMetadata = false;
// ...
‫۴ سال و ۱۱ ماه قبل، چهارشنبه ۱۰ مهر ۱۳۹۸، ساعت ۱۳:۵۴

- رفع خطای اجرای برنامه در Windows 8.1 / Windows Server 2012 R2
The program can't start because api-ms-win-crt-runtime-l1-1-0.dll is missing from your computer. 
Try reinstalling the program to fix this problem.
KB2999226 را نصب کنید.

- رفع خطای اجرای برنامه در Windows 7 / Windows Server 2008 R2 
the library hostfxr.dll was found, but loading it from C:\<path_to_app>\hostfxr.dll failed
KB2533623 را نصب کنید.
‫۴ سال و ۱۱ ماه قبل، چهارشنبه ۱۰ مهر ۱۳۹۸، ساعت ۱۳:۴۶
یک نکته‌ی تکمیلی: اگر بخواهیم از ویژوال استودیو برای کار با NET Core. استفاده کنیم، حداقل چه نگارشی را باید نصب کرد؟

.NET Core SDK version Visual Studio version
3.0                 Visual Studio 2019 version 16.3 or higher.
2.2                 Visual Studio 2017 version 15.9 or higher.
2.1                 Visual Studio 2017 version 15.7 or higher.
1.x                 Visual Studio 2017 version 15.0 or higher.