در طی چند ماه گذشته، ریز نکاتی که برای ارتقاء به ASP.NET Core 3.0 مورد نیاز هستند، در ذیل مطالب مرتبط با هر کدام، جهت برقراری ارتباط منطقی و امکان مشاهدهی روند تغییرات هرکدام، به صورت مجزا و در طی نظراتی تکمیلی، به آن مطالب اضافه شدهاند. در ادامه برای داشتن یک دید کلی و سهولت دسترسی به آنها، لیست این موارد را نیز مشاهده میکنید:
پیشنیازهای کار با ASP.NET Core 3.0
خلاصه شدن ساختار فایلهای csproj
ارائهی یک Generic Host در نگارش سوم
تغییرات مسیریابی با معرفی endpoint routing
بالا رفتن کارآیی پردازش JSON
نکتهی مهمی در مورد توزیع برنامههای وب در IIS
تغییرات SignalR
تغییرات امنیتی نگارش سوم
تغییرات تنظیمات تعدادی از میانافزارها
تغییر مهم ابزارهای مرتبط با EF Core 3.0
پیشنیازهای کار با ASP.NET Core 3.0
خلاصه شدن ساختار فایلهای csproj
- ارتقاء به ASP.NET Core 3.0 و سرنوشت metapackageهای Microsoft.AspNetCore
- در NET Core 3x. دیگر بستههای نیوگت Shared framework به صورت جداگانه تولید و توزیع نمیشوند
ارائهی یک Generic Host در نگارش سوم
- ارتقاء به ASP.NET Core 3.0 و تغییرات نقطهی آغازین برنامه
- قالبی برای ایجاد سرویسهای پسزمینه به NET Core 3.0. اضافه شدهاست که بر اساس Generic Host کار میکند.
- محدود شدن امکان تزریق وابستگیها در سازندهی کلاس آغازین برنامه در ASP.NET Core 3.0
تغییرات مسیریابی با معرفی endpoint routing
- نام متدهای تعاریف مسیریابی تغییر کردهاند.
- تغییرات مورد نیاز در فایل آغازین برنامه جهت ارتقاء به Endpoint routing
- نحوهی تعریف بررسی سلامت برنامه بر اساس endpoint routing تغییر کردهاست.
- همچنین روش فعالسازی ASP.NET MVC نیز تغییر کردهاست.
بالا رفتن کارآیی پردازش JSON
نکتهی مهمی در مورد توزیع برنامههای وب در IIS
- نام بستهی npm سمت کلاینت مخصوص SignalR Core مجددا تغییر کردهاست.
- UseSignalR منسوخ شده اعلام میشود و با UseEndpoints جانشین خواهد شد.
تغییرات امنیتی نگارش سوم
- میانافزار جدید Authorization در ASP.NET Core 3.0
- امضای سازندهی تعدادی از سرویسهای توکار ASP.NET Core Identity 3.0 تغییر کردهاند.
- امضای اینترفیس ILookupNormalizer، توکار ASP.NET Core Identity 3.0 تغییر کردهاست.
- اگر NET Core 3 SDK. را نصب کنید، امکان ایجاد یک برنامهی Angular مبتنی بر Microsoft.AspNetCore.ApiAuthorization.IdentityServer به قالبهای پیشفرض آن اضافه شدهاست.
- تنظیمات کوکیهای سشن تغییر کردهاند.
- تمام Response.Body.Writeها در Action Resultها ممنوع شدهاند.
- هرجائی در برنامهی خود IHostingEnvironment دارید، باید به IWebHostEnvironment تبدیل شود.
The first preview of Entity Framework Core (EF Core) 8 is available on NuGet today!
Basic information
EF Core 8, or just EF8, is the successor to EF Core 7, and is scheduled for release in November 2023, at the same time as .NET 8.
EF8 currently targets .NET 6. This will likely be updated to .NET 8 as we near release.
EF8 will align with .NET 8 as a long-term support (LTS) release. See the .NET support policy for more information.
IClaimsTransformation مربوط به NET Core 2.x. هست. در نگارش 1x نام دیگری داشتهاست (IClaimsTransformer بوده).
در بخش قبلی به چگونگی ساخت کنترلرهای تو در تو در AngularJs پرداختیم. همچنین بررسی نمودیم که propertyهای تعریف شده در کنترلر ما چگونه قابل استفاده توسط کنترلر فرزند میباشند.
کد html زیر هم از کنترلرهای تعریف شدهی در بالا، به صورت زیر استفاده کرده است. نگاهی کوتاه و مختصر به این فایل و سپس به شرح فرآیند ارث بری propertyها میپردازیم:
حال روشی دیگر را برای ارث بری تابعها و propertyها، در کنترلرهای تو در تو معرفی مینماییم. لازم به ذکر است که سورس پروژه را میتوانید از لینک زیر دریافت نمایید:
کد جاوااسکریپت زیر سه کنترلر تو در تو را پیاده سازی میکند:
var firstControllerObj = function ($scope) { // Initialize the model object $scope.firstModelObj = { firstName: "John" }; }; var secondControllerObj = function ($scope) { // Initialize the model object $scope.secondModelObj = { lastName: "Doe" }; // Define utility functions $scope.getFullName = function () { return $scope.firstModelObj.firstName + " " + $scope.secondModelObj.lastName; }; }; var thirdControllerObj = function ($scope) { // Initialize the model object $scope.thirdModelObj = { middleName: "Al", lastName: "Smith" }; // Define utility functions $scope.getFullName = function () { return $scope.firstModelObj.firstName + " " + $scope.thirdModelObj.middleName + " " + $scope.thirdModelObj.lastName; }; };
<div ng-controller="firstControllerObj"> <h3>First controller</h3> <strong>First name:</strong> {{firstModelObj.firstName}}<br /> <br /> <label>Set the first name: <input type="text" ng-model="firstModelObj.firstName" /></label><br /> <br /> <div ng-controller="secondControllerObj"> <h3>Second controller (inside First)</h3> <strong>First name (from First):</strong> {{firstModelObj.firstName}}<br /> <strong>Last name (from Second):</strong> {{secondModelObj.lastName}}<br /> <strong>Full name:</strong> {{getFullName()}}<br /> <br /> <label>Set the first name: <input type="text" ng-model="firstModelObj.firstName" /></label><br /> <label>Set the last name: <input type="text" ng-model="secondModelObj.lastName" /></label><br /> <br /> <div ng-controller="thirdControllerObj"> <h3>Third controller (inside Second and First)</h3> <strong>First name (from First):</strong> {{firstModelObj.firstName}}<br /> <strong>Middle name (from Third):</strong> {{thirdModelObj.middleName}}<br /> <strong>Last name (from Second):</strong> {{secondModelObj.lastName}}<br /> <strong>Last name (from Third):</strong> {{thirdModelObj.lastName}}<br /> <strong>Full name (redefined in Third):</strong> {{getFullName()}}<br /> <br /> <label>Set the first name: <input type="text" ng-model="firstModelObj.firstName" /></label><br /> <label>Set the middle name: <input type="text" ng-model="thirdModelObj.middleName" /></label><br /> <label>Set the last name: <input type="text" ng-model="thirdModelObj.lastName" /></label> </div> </div> </div>
اگر نگاهی به کنترلرهای فوق بیاندازیم میبینیم که در firstControllerObj تنها یک شیء درون scope قرار داده شده که firstModelObj نامیده شده است و این شی تنها دارای یک property با نام firstName است. در کنترلر دوم نیز یک شیء جدید با نام secondModelObj ساخته شده است؛ با این تفاوت که property آن lastName نام دارد. حال به بدنهی فایل html دو کنترلر توجه کنیم. میبینیم که در کنترلر دوم مستقیما پراپرتی firstName از شیء درون کلاس اول فراخوانی شده است. با اجرای پروژهی نمونه خواهیم دید که با تغییر input شامل firstName در کنترلر دوم، این مدل در کنترلر اول نیز تغییر خواهد کرد.
بنابراین ما میتوانیم در کنترلر فرزند به objectهای درون کنترلر والد دسترسی داشته باشیم و مقادیر آنرا تغییر دهیم. باید توجه داشت که این نوع تعریف مدل با آنچه که در بخش اول گفته شد، تفاوتی اساسی دارد. در بخش قبل با تغییر مدل توسط کنترلر فرزند، آن مدل در کنترلر والد تغییری نمیکرد؛ اما در روشی که در این مقاله شرح داده شد مشاهده نمودیم که با تغییر مدل در کنترلر فرزند مقدار مدل در کنترلر والد نیز تغییر میکند.
اشتراکها
شروع کار با gRPC در Asp.net core
اشتراکها
مجموعه نکاتی از ASP.NET Core
اشتراکها