‫۵ سال و ۶ ماه قبل، پنجشنبه ۲ اسفند ۱۳۹۷، ساعت ۱۴:۲۹
یک نکته‌ی تکمیلی: اگر تنظیمات Logging در فایل applicationsettings.json قید نشوند، برنامه به شدت کند خواهد شد
عموما در فایل applicationsettings.json یک چنین تنظیمی وجود دارد:
{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  }
}
اگر در حین ارائه‌ی نهایی برنامه این فایل یا این تنظیم را فراموش کنید، سطح لاگ پیش‌فرض برنامه به Information تنظیم می‌شود. در این حالت کوچکترین رخ‌دادی نیز در برنامه لاگ خواهد شد و این مساله به شدت کارآیی برنامه را کاهش می‌دهد (تا حدود 40 برابر!). بنابراین ارائه‌ی پیش‌فرض فوق را فراموش نکنید.
بله. با سیاست‌های دسترسی پویا قابل پیاده سازی است؛ دقیقا چیزی شبیه به MustOwnImageHandler و [Authorize("MustOwnImage")] مطلب جاری. در HandleRequirementAsync، نقش (که یکی از Claims است و یا با داشتن ownerId آن، قابل واکشی از بانک اطلاعاتی است) را دریافت و تاریخ انقضای آن‌را با زمان جاری مقایسه کنید. در صورت رسیدن تاریخ انقضای آن، ()context.Fail را فراخوانی کنید.
‫۵ سال و ۷ ماه قبل، دوشنبه ۲۹ بهمن ۱۳۹۷، ساعت ۱۲:۳۲
یک نکته‌ی تکمیلی: امکان اعتبارسنجی تنظیمات برنامه در ASP.NET Core 2.2

فرض کنید، چنین تنظیماتی را تدارک دیده‌اید:
"CustomConfig": {
  "Setting1": "Hello",
  "Setting2": "Hello" 
}
در ASP.NET Core 2.2 می‌توان با استفاده از data annotations، برای کلاس معادل آن‌ها اعتبارسنجی نیز درنظر گرفت:
public class CustomConfig
{
        [Required(ErrorMessage = "Custom Error Message")]
        public string Setting1 { get; set; }

        public string Setting2 { get; set; }

        public string Setting3 { get; set; }
}
سپس برای فعالسازی آن می‌توان به صورت زیر عمل کرد:
namespace MvcTest
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions<CustomConfig>()
                    .Bind(Configuration.GetSection("CustomConfig"))
                    .ValidateDataAnnotations();
        }
کار اعتبارسنجی خاصیت Setting1 زمانی رخ می‌دهد که برنامه برای اولین بار می‌خواهد از مقدار آن استفاده کند؛ نه زمانیکه برنامه برای اولین بار اجرا می‌شود. قابلیت eager validation احتمالا به نگارش‌های بعدی اضافه خواهد شد. اگر اعتبارسنجی تنظیمات با شکست مواجه شود، استثنای OptionsValidationException را صادر می‌کند. این استثناء به همراه لیستی از خطاهای ممکن، توسط خاصیت ex.Failures آن قابل بررسی است.

همچنین اگر نیاز به تعریف اعتبارسنجی سفارشی نیز وجود داشت می‌توان به صورت زیر عمل کرد:
namespace MvcHealthCheckTest
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions<CustomConfig>()
                    .Bind(Configuration.GetSection("CustomConfig"))
                    .ValidateDataAnnotations()
                    .Validate(customConfig =>
                    {
                        if (customConfig.Setting2 != default)
                        {
                            return customConfig.Setting3 != default;
                        }
                        return true;
                    }, "Setting 3 is required when Setting2 is present");
        }
در اینجا متد Validate، شیء customConfig را از تنظیمات برنامه خوانده و مقدار دهی می‌کند. سپس آن‌را به صورت یک <Func<CustomConfig, bool جهت اعتبارسنجی سفارشی در اختیار مصرف کننده قرار می‌دهد. خروجی false آن به معنای شکست اعتبارسنجی است. در این حالت می‌توان توسط پارامتر دوم متد Validate، یک پیام خطا را نیز نمایش داد.
‫۵ سال و ۷ ماه قبل، شنبه ۲۷ بهمن ۱۳۹۷، ساعت ۱۵:۳۷
ارتقاء به ASP.NET Core 3.0
در نگارش سوم، وابستگی مستقیم به JSON.NET در ASP.NET Core حذف شده‌است («معرفی System.Text.Json در NET Core 3.0.»). علت اینجا است که علاوه بر فراهم آوردن امکان استفاده‌ی از کتابخانه‌های JSON ثالث، نویسنده‌ی JSON.NET حاضر نشده API آن‌را بر اساس Span بازنویسی کند تا به حداکثر کارآیی برسد. بنابراین اگر می‌خواهید هنوز هم از JSON.NET استفاده کنید، نیاز است ابتدا بسته‌ی نیوگت Adapter مخصوص آن‌را جداگانه دریافت و سپس آن‌را به سیستم معرفی کنید:
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddNewtonsoftJson();
}
‫۵ سال و ۷ ماه قبل، شنبه ۲۷ بهمن ۱۳۹۷، ساعت ۱۲:۴۴
یک نکته‌ی تکمیلی: برای فعالسازی IIS InProcess hosting در ASP.NET Core 2.2
 
ابتدا باید TargetFramework متناسبی را در فایل csproj انتخاب کرد:
<TargetFramework>netcoreapp2.2</TargetFramework>
سپس شماره نگارش را از Microsoft.AspNetCore.App حذف کنید:
<PackageReference Include="Microsoft.AspNetCore.App"  />
و در آخر فایل web.config به صورت زیر تغییر می‌کند:
<configuration> 
  <system.webServer> 
    <handlers> 
     <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> 
    </handlers> 
    <aspNetCore processPath="dotnet" arguments=".\MyApp.dll" hostingModel="InProcess" /> 
   </system.webServer> 
</configuration>
که در آن AspNetCoreModuleV2 و hostingModel جدید هستند.