‫۵ سال و ۶ ماه قبل، سه‌شنبه ۲۸ اسفند ۱۳۹۷، ساعت ۱۸:۰۷
یک نکته‌ی تکمیلی: الزامات زنده نگه داشتن کارهای پس‌زمینه در IIS به صورت یک اسکریپت پاورشل
    ## IIS WebAdmin Module
    Import-Module WebAdministration

    $AppPoolInstance = Get-Item IIS:\AppPools\$AppPool

    Write-Output "Set Site PreLoadEnabled to true"
    Set-ItemProperty IIS:\Sites\$Site -name applicationDefaults.preloadEnabled -value True

    Write-Output "Set Recycling.periodicRestart.time  = 0"
    $AppPoolInstance.Recycling.periodicRestart.time = [TimeSpan]::Parse("0");
    $AppPoolInstance | Set-Item

    Write-Output "Set App Pool start up mode to AlwaysRunning"
    $AppPoolInstance.startMode = "alwaysrunning"

    Write-Output "Disable App Pool Idle Timeout"
    $AppPoolInstance.processModel.idleTimeout = [TimeSpan]::FromMinutes(0)
    $AppPoolInstance | Set-Item

    if ($appPoolStatus -ne "Started") {
        Write-Output "Starting App Pool"
        Start-WebAppPool $AppPool    
    } else {
        Write-Output "Restarting App Pool"
        Restart-WebAppPool $AppPool
    }
‫۵ سال و ۶ ماه قبل، سه‌شنبه ۲۸ اسفند ۱۳۹۷، ساعت ۱۶:۱۴
این خطا صرفا به معنای عدم تطابق شماره نگارش بسته‌ی نصب شده در پروژه با آخرین شماره نگارش SDK نصب شده‌ی بر روی سیستم است. در نگارش الف، ابزار Migration از قابلیتی استفاده کرده که در نگارش ب آن از طرف خودشان ممنوع اعلام شده (برای تیم توسعه دهنده) و یا برعکس عنوان شده که چنین سرویسی را باید به صورت داخلی فراخوانی کنند (در کل هدف از این استثناء شما نیستید؛ خود تیم EF است):
public class MyDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
        => services.AddEntityFrameworkSqlServerNetTopologySuite();
}
‫۵ سال و ۶ ماه قبل، دوشنبه ۲۷ اسفند ۱۳۹۷، ساعت ۱۰:۵۲
- یکی برای هدرهای کوکی است و یکی برای تنظیم مشخصات توکن.
The TimeSpan after which the authentication ticket stored inside the cookie expires. 
ExpireTimeSpan is added to the current time to create the expiration time for the ticket. 
The ExpiredTimeSpan value always goes into the encrypted AuthTicket verified by the server. 
It may also go into the Set-Cookie header, but only if IsPersistent is set. 
To set IsPersistent to true, configure the AuthenticationProperties passed to SignInAsync. 
The default value of ExpireTimeSpan is 14 days.
‫۵ سال و ۶ ماه قبل، یکشنبه ۲۶ اسفند ۱۳۹۷، ساعت ۱۱:۲۹
یک نکته‌ی تکمیلی: روش ساده‌تر تنظیم هدرهای امنیتی در فایل web.config که سازگار با تمام نگارش‌های ASP.NET است
<system.webServer>
  <httpProtocol>
    <customHeaders>
      <!-- SECURITY HEADERS - https://securityheaders.io/? -->
      <!-- Protects against Clickjacking attacks. ref.: http://stackoverflow.com/a/22105445/1233379 -->
      <add name="X-Frame-Options" value="SAMEORIGIN" />
      <!-- Protects against Clickjacking attacks. ref.: https://www.owasp.org/index.php/HTTP_Strict_Transport_Security_Cheat_Sheet -->
      <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains"/>
      <!-- Protects against XSS injections. ref.: https://www.veracode.com/blog/2014/03/guidelines-for-setting-security-headers/ -->
      <add name="X-XSS-Protection" value="1; mode=block" />
      <!-- Protects against MIME-type confusion attack. ref.: https://www.veracode.com/blog/2014/03/guidelines-for-setting-security-headers/ -->
      <add name="X-Content-Type-Options" value="nosniff" />
      <!-- CSP modern XSS directive-based defence, used since 2014. ref.: http://content-security-policy.com/ -->
      <add name="Content-Security-Policy" value="default-src 'self'; font-src *;img-src * data:; script-src *; style-src *;" />
      <!-- Prevents from leaking referrer data over insecure connections. ref.: https://scotthelme.co.uk/a-new-security-header-referrer-policy/ -->
      <add name="Referrer-Policy" value="strict-origin" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
‫۵ سال و ۶ ماه قبل، یکشنبه ۲۶ اسفند ۱۳۹۷، ساعت ۰۵:۱۰
یک نکته‌ی تکمیلی: روش کاهش تعداد درخواست‌های Pre-flight

در مورد درخواست‌های Pre-flight که راسا توسط مرورگر صادر می‌شود، در مطلب فوق بحث شد. برای کاهش تعداد این درخواست‌ها می‌توان نتیجه‌ی آن‌ها را کش کرد؛ به صورت زیر:
options.AddPolicy("SetPreflightExpiration",
    builder =>
    {
        builder.WithOrigins("https://www.dntips.ir")
               .SetPreflightMaxAge(TimeSpan.FromSeconds(2520));
    });
حداکثر زمانیکه مرورگر فایرفاکس برای این مقدار قبول می‌کند 24 ساعت است و مرورگر کروم فقط 10 دقیقه. مقدار پیش‌فرض مرورگر کروم در این مورد 5 ثانیه است. بنابراین تنظیم آن می‌تواند با حذف درخواست‌های تکراری Pre-flight، کارآیی برنامه را بهبود بخشد.