۵ سال و ۶ ماه قبل، پنجشنبه ۲ اسفند ۱۳۹۷، ساعت ۱۶:۵۲
۵ سال و ۶ ماه قبل، پنجشنبه ۲ اسفند ۱۳۹۷، ساعت ۱۴:۲۹
یک نکتهی تکمیلی: اگر تنظیمات Logging در فایل applicationsettings.json قید نشوند، برنامه به شدت کند خواهد شد
عموما در فایل applicationsettings.json یک چنین تنظیمی وجود دارد:
{ "Logging": { "LogLevel": { "Default": "Warning" } } }
۵ سال و ۷ ماه قبل، چهارشنبه ۱ اسفند ۱۳۹۷، ساعت ۱۷:۲۱
از این لحاظ تفاوتی نمیکند.
۵ سال و ۷ ماه قبل، دوشنبه ۲۹ بهمن ۱۳۹۷، ساعت ۱۴:۴۱
بله. با سیاستهای دسترسی پویا قابل پیاده سازی است؛ دقیقا چیزی شبیه به MustOwnImageHandler و [Authorize("MustOwnImage")] مطلب جاری. در HandleRequirementAsync، نقش (که یکی از Claims است و یا با داشتن ownerId آن، قابل واکشی از بانک اطلاعاتی است) را دریافت و تاریخ انقضای آنرا با زمان جاری مقایسه کنید. در صورت رسیدن تاریخ انقضای آن، ()context.Fail را فراخوانی کنید.
۵ سال و ۷ ماه قبل، دوشنبه ۲۹ بهمن ۱۳۹۷، ساعت ۱۲:۳۲
یک نکتهی تکمیلی: امکان اعتبارسنجی تنظیمات برنامه در ASP.NET Core 2.2
فرض کنید، چنین تنظیماتی را تدارک دیدهاید:
در ASP.NET Core 2.2 میتوان با استفاده از data annotations، برای کلاس معادل آنها اعتبارسنجی نیز درنظر گرفت:
سپس برای فعالسازی آن میتوان به صورت زیر عمل کرد:
کار اعتبارسنجی خاصیت Setting1 زمانی رخ میدهد که برنامه برای اولین بار میخواهد از مقدار آن استفاده کند؛ نه زمانیکه برنامه برای اولین بار اجرا میشود. قابلیت eager validation احتمالا به نگارشهای بعدی اضافه خواهد شد. اگر اعتبارسنجی تنظیمات با شکست مواجه شود، استثنای OptionsValidationException را صادر میکند. این استثناء به همراه لیستی از خطاهای ممکن، توسط خاصیت ex.Failures آن قابل بررسی است.
همچنین اگر نیاز به تعریف اعتبارسنجی سفارشی نیز وجود داشت میتوان به صورت زیر عمل کرد:
فرض کنید، چنین تنظیماتی را تدارک دیدهاید:
"CustomConfig": { "Setting1": "Hello", "Setting2": "Hello" }
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(); }
همچنین اگر نیاز به تعریف اعتبارسنجی سفارشی نیز وجود داشت میتوان به صورت زیر عمل کرد:
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، یک پیام خطا را نیز نمایش داد.
۵ سال و ۷ ماه قبل، شنبه ۲۷ بهمن ۱۳۹۷، ساعت ۱۷:۵۹
اگر رشتهای را که تولید کرده مورد تائید است، یک "~" به ابتدای آن + کنید (در نهایت یک رشتهی #C که بیشتر نیست) یا سطر VirtualPathUtility.ToAbsolute را حذف کنید.
۵ سال و ۷ ماه قبل، شنبه ۲۷ بهمن ۱۳۹۷، ساعت ۱۵:۳۷
ارتقاء به 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(); }
۵ سال و ۷ ماه قبل، شنبه ۲۷ بهمن ۱۳۹۷، ساعت ۱۲:۵۲
در نگارش 3، تنظیم دیگر آن به صورت زیر تغییر کردهاست:
services.AddMvc() .AddMvcRazorRuntimeCompilation();
۵ سال و ۷ ماه قبل، شنبه ۲۷ بهمن ۱۳۹۷، ساعت ۱۲:۴۴
یک نکتهی تکمیلی: برای فعالسازی IIS InProcess hosting در ASP.NET Core 2.2
سپس شماره نگارش را از Microsoft.AspNetCore.App حذف کنید:
و در آخر فایل web.config به صورت زیر تغییر میکند:
که در آن AspNetCoreModuleV2 و hostingModel جدید هستند.
ابتدا باید TargetFramework متناسبی را در فایل csproj انتخاب کرد:
<TargetFramework>netcoreapp2.2</TargetFramework>
<PackageReference Include="Microsoft.AspNetCore.App" />
<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>
۵ سال و ۷ ماه قبل، پنجشنبه ۲۵ بهمن ۱۳۹۷، ساعت ۰۳:۴۳
روش پیاده سازی پشت صحنهی ویژگی Remote به کمک unobtrusive ajax است.