‫۴ سال و ۳ ماه قبل، یکشنبه ۱۱ خرداد ۱۳۹۹، ساعت ۰۳:۰۴
جهت اطلاع
- این پروژه به Angular Material 9x ارتقاء داده شده؛ جزئیات بیشتر
- کلیات نهایی آن با مطالب این سری یکی است. فقط روش importهای آن تغییر کرده که در سورس نهایی قابل مشاهده‌است.
‫۴ سال و ۳ ماه قبل، یکشنبه ۱۱ خرداد ۱۳۹۹، ساعت ۰۲:۵۹
- این پروژه به Angular Material 9x ارتقاء داده شده؛ جزئیات بیشتر
- کتابخانه‌ی jalali-moment متاسفانه باگ زیاد دارد. اگرتنظیم jalaliMoment.locale("fa") در آن وجود نداشته باشد، مدام خطای null reference می‌دهد. همچنین روش معرفی تاریخ میلادی به آن اینبار باید به اینصورت باشد (عدم سازگاری با نگارش‌های قبلی آن).
فقط کافی است از آخرین نگارش Swashbuckle.AspNetCore استفاده کنید که به صورت توکار از IFormFile برای آپلود فایل‌ها پشتیبانی می‌کند. در نگارش‌های قبل از آن (نگارش‌های 4x) نیاز به پیاده سازی یک IOperationFilter سفارشی برای اینکار بود، که دیگر نیازی به آن نیست.
برای نمونه اکشن متد زیر
[HttpPost("two-files")]
public async Task Upload(IFormFile file1, IFormFile file2)
{
    // validate the files, scan virus, save them to a file storage
}
چنین خروجی را پیدا می‌کند:

و یا حالت پیچیده‌تر آن

/// <summary>
/// Submit a form which contains a key-value pair and a file.
/// </summary>
/// <param name="id">Student ID</param>
/// <param name="form">A form which contains the FormId and a file</param>
/// <returns></returns>
[HttpPost("{id:int}/forms")]
[ProducesResponseType(typeof(FormSubmissionResult), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<FormSubmissionResult>> SubmitForm(int id, [FromForm] StudentForm form)
{
 // ...
}

public class StudentForm
{
    [Required] public int FormId { get; set; }
    [Required] public IFormFile StudentFile { get; set; }
}
این خروجی را ایجاد می‌کند:

‫۴ سال و ۳ ماه قبل، سه‌شنبه ۶ خرداد ۱۳۹۹، ساعت ۱۲:۵۰
یک نکته‌ی تکمیلی: چگونه در حین توسعه، بررسی CORS را در مرورگر کروم غیرفعال کنیم؟
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security  --user-data-dir=~/chromeTemp
اگر کروم با پرچم disable-web-security-- اجرا شود، دیگر کار بررسی CORS را انجام نمی‌دهد.
‫۴ سال و ۳ ماه قبل، دوشنبه ۵ خرداد ۱۳۹۹، ساعت ۱۵:۰۷
مشکل؟ یا طبیعت سیستم؟
- به ازای هر درخواست، یکبار متد RetrieveAsync کلاس DistributedCacheTicketStore فراخوانی می‌شود؛ چون شیء User موجود در HttpContext، بر اساس اطلاعات کوکی دریافتی ساخته می‌شود. اکنون که این کوکی داخل دیتابیس هست، خوب باید خوانده شود تا این شیء را تشکیل دهد.
- فعالسازی ()services.enableImmediateLogout ، سبب فراخوانی RenewAsync کلاس DistributedCacheTicketStore به ازای هر درخواست می‌شود. اگر می‌خواهید تعداد آن‌را کمتر کنید، قابلیت logout آنی کاربران در زمان غیرفعال شدن آن‌ها در بانک اطلاعاتی را حذف کنید.
‫۴ سال و ۳ ماه قبل، شنبه ۳ خرداد ۱۳۹۹، ساعت ۰۱:۴۹
- نمی‌رسی. این کوئری بین دو تاریخ نیست. ابتدا داره، اما انتها خیر.
- مهم هم نیست که نمی‌رسی یا با یک کوئری دیگر بله. مهم روش تعریف توابع توکار بانک اطلاعاتی بود و روش دسترسی به آن‌ها در EF Core، با یک مثال. این یک مثال هست. این نوع توابع توکار یکی دو تا نیستند و منحصر به تاریخ هم نیستند.
‫۴ سال و ۳ ماه قبل، شنبه ۳ خرداد ۱۳۹۹، ساعت ۰۰:۴۹
با فرض نصب ماژول URL-rewrite، مسیریابی فایل‌های ایستای React را به صورت زیر هم می‌توان در فایل web.config برنامه‌ی وب تنظیم کرد تا درخواست مسیرهای سمت کلاینت آن‌ها به سمت سرور ارسال نشود:
<?xml version="1.0"?>
<configuration>
  <system.webServer>
     <rewrite>
         <rules>
            <rule name="React Routes" stopProcessing="true">
              <match url=".*" />
              <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
              </conditions>
              <action type="Rewrite" url="/index.html" />
            </rule>
         </rules>
     </rewrite>
  </system.webServer>
</configuration>