ویژگی‌ های جدید در ASP.NET Core 2.1

با انتشار ASP.NET Core 2.1 تغییرات و بهبودهایی در آن رخ داده است. ویژگی‌های بهبودیافته‌ای که ASP.NET Core را بهتر و سریع‌تر از ورژن قبلی آن ساخته است. در این مقاله ما قصد داریم تا به بررسی مهم‌ترین تغییرات در ASP.NET Core 2.1 بپردازیم. با ما همراه باشید.

ویژگی‌ های جدید در ASP.NET Core 2.1

SignalR

SignalR برای ASP.NET Core 2.1 بازنویسی شده است.  بهبودهایی در SignalR موجود در ASP.NET Core 2.1 ایجاد شده است که شامل موارد زیر هستند:

مدل scale-out ساده شده

کلاینت جاوا اسکریپت جدید بدون وابستگی به jQuery

پروتکل باینری فشرده بر اساس MessagePack

پشتیبانی از پروتکل‌های مرسوم

مدل جدید پاسخ‌ استریمینگ (streaming response)

پشتیبانی از کلاینت‌ها بر اساس WebSocketهای ساده

class library های Razor

ASP.NET Core 2.1 ساخت و استفاده از UI مبتنی بر Razor را در یک کتابخانه به صورت ساده‌تر ایجاد می‌کند و آن را در میان پروژه‌های متعدد به اشتراک می‌گذارد. Razor SDK جدید ساخت فایل‌های Razor را درون class library پروژه فراهم می‌کند که می‌تواند درون یک پکیج NuGet قرار گیرد. ویوها و صفحات در کتابخانه‌ها به صورت خودکار یافت شده و می‌توانند توسط برنامه لغو شوند. با ادغام جمع‌آوری Razor درون build:

زمان شروع برنامه به طور قابل توجهی سریع‌تر می‌شود.

آپدیت‌های سریع برای ویوها و صفحات Razor در زمان اجرا، به عنوان بخشی از توسعه تکراری گردش کار، هنوز در دسترس هستند.

Scaffolding و کتابخانه Identity UI

ASP.NET Core 2.1، ASP.NET Core Identity را به عنوان کلاس لایبرری Razor ارائه می‌دهد. برنامه‌هایی که شامل Identity هستند می‌توانند scaffolder جدید Identity را برای افزودن سورس کد موجود در Identityی Razor Class Library (RCL) اعمال کنند. ممکن است بخواهید سورس کدی را تولید کنید تا بتوانید کد را اصلاح کرده و رفتار آن را تغییر دهید. مثلا می‌توانید scaffolder را برای تولید کد مورد استفاده در ثبت‌نام هدایت کنید. کد تولید شده بر همان کد در Identity RCL اولویت دارد.

برنامه‌هایی که شامل احراز هویت نمی‌شوند می‌توانند Identity scaffolder را برای افزودن پکیج RCL Identity به کار برند. شما گزینه‌ای برای‌ انتخاب برنامه Identity  جهت تولید دارید.

HTTPS

با افزایش تمرکز بر امنیت و حریم شخصی، فعال کردن HTTPS برای برنامه‌های وب بسیار مهم است. اجرای HTTPS بر روی وب به طور فزاینده‌ای امنیت را بالا می‌برد. سایت‌هایی که از HTTPS استفاده نمی‌کنند ناامن هستند. مرورگرها (موزیلا، کروم) شروع به اجرای آن می‌کنند، در این هنگام ویژگی‌های وب باید از محیط امنی استفاده کنند. GDPR نیاز به استفاده از HTTPS دارد تا از حریم شخصی کاربران محافظت کند. در حالی که استفاده از HTTPS در تولید بسیار مهم است، استفاده از HTTPS در توسعه می‌تواند به جلوگیری از مسائل مربوط به گسترش (مثل لینک‌های ناامن) کمک کند. ASP.NET Core 2.1 شامل موارد بهبودیافته‌ای است که استفاده از HTTPS را در توسعه و پیکربندی HTTPS هنگام تولید ساده‌تر می‌سازد.

پیش‌فرض

برای تسهیل توسعه وب‌سایت امن، در حال حاضر HTTPS به طور پیش‌فرض فعال است. در 2.1، وقتی یک گواهی‌نامه (certificate) توسعه محلی وجود دارد، Kestrel به https://localhost:5001 گوش می‌دهد. یک گواهی توسعه ایجاد شده است:

1. به عنوان بخشی از تجربه اولین اجرای NET Core SDK.، زمانی که شما برای اولین بار از SDK استفاده می‌کنید.

2. استفاده از ابزار جدید dev-certs به صورت دستی

dotnet dev-certs https –trust را برای اطمینان از گواهی نامه اجرا کنید.

اجرا و هدایت HTTPS

به طور معمول برنامه‌های وب نیاز به گوش کردن به HTTP و HTTPS دارند، اما سپس تمام ترافیک HTTP را به HTTPS هدایت می‌کنند. در 2.1، میان‌افزار هدایت HTTPS معرفی شده است که به صورت هوشمندانه بر اساس وجود پورت‌های bound server یا پیکربندی هدایت می‌شوند.

استفاده از HTTPS می‌تواند با استفاده از پروتکل امنیت حمل و نقل سخت‌گیر HTTP (HTTP Strict Transport Security) یا همان HSTS انجام شود. HSTS شرایطی را برای مرورگرها فراهم می‌کند تا همیشه از طریق HTTPS به سایت‌ها دسترسی داشته باشند. ASP.NET Core 2.1 میان‌افزار HSTS را اضافه کرده است که از گزینه‌هایی برای max age، زیردامنه‌ها و لیست پیش‌بارگذاری HSTS پشتیبانی می‌کند.

پیکربندی برای تولید

در تولید، HTTPS صریحا باید پیکربندی شود. در 2.1، ساختار تنظیمات پیش‌فرض جهت پیکربندی HTTPS برای Kestrel اضافه شده است. برنامه‌ها می‌توانند با استفاده از موارد زیر پیکربندی شوند:

endpointهای چندگانه ازجمله URLها

گواهی (certificate) برای استفاده از HTTPS از یک فایل روی دیسک یا از یک مخزن گواهی.

GDPR

ASP.NET Core قالب‌ها و APIهایی را برای کمک به مواجه شدن با برخی از الزامات GDPR (مقررات حفاظت از اطلاعات عمومی) ارائه می‌دهد. در این مثال می‌توانید نحوه استفاده از آن را ببینید و بسیاری از نقاط توسعه GDPR و APIهای اضافه شده به قالب‌های ASP.NET Core 2.1 را امتحان کنید.

تست‌های ادغام

پکیج جدیدی معرفی شده است که ایجاد و اجرای تست را ساده کرده است. پکیج Microsoft.AspNetCore.Mvc.Testing وظایف زیر را مدیریت می‌کند:

فایل وابستگی (*.deps) از برنامه تست شده را درون فولدر bin پروژه تست کپی می‌کند.

محتوای ریشه (root) را در ریشه پروژه برنامه تست شده قرار می‌دهد تا زمانی که تست‌ها اجرا می‌شوند، فایل‌های استاتیک و ویوها/صفحات یافت شوند.

کلاس WebApplicationFactory را ارائه می‌دهد تا bootstrapping برنامه تست‌شده با TestServer را ساده‌تر کند.

تست زیر از xUnit استفاده می‌کند تا بارگذاری صفحه Index را با یک کد وضعیت موفق و هدر صحیح Content-Type بررسی کند:

public class BasicTests
    : IClassFixture<WebApplicationFactory<RazorPagesProject.Startup>>
{
    private readonly HttpClient _client;

    public BasicTests(WebApplicationFactory<RazorPagesProject.Startup> factory)
    {
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task GetHomePage()
    {
        // Act
        var response = await _client.GetAsync("/");

        // Assert
        response.EnsureSuccessStatusCode(); // Status Code 200-299
        Assert.Equal("text/html; charset=utf-8",
            response.Content.Headers.ContentType.ToString());
    }
}

[ApiControllerActionResult

ASP.NET Core 2.1 قراردادهای جدید برنامه‌نویسی را ارائه می‌دهد که ساخت web APIهای واضح و توصیفی را ساده‌تر کرده است. ActionResult<T> نوع جدیدی است که به برنامه اجازه می‌دهد که هر نوع پاسخ یا نتیجه عملکردی را بازگرداند (مانند IActionResult). درحالی که همچنان شامل نوع پاسخ است. ویژگی  [ApiController] نیز به عنوان راهی برای انتخاب در قراردادها و رفتارهای خاص Web API اضافه شده است.

IHttpClientFactory

ASP.NET Core 2.1 شامل سرویس جدید IHttpClientFactory است که نمونه های HttpClient را تحلیل و پیکربندی می‌کند. HttpClient در حال حاضر مفهوم delegating handlerها را دارد که می‌توانند با هم برای خروجی درخواست‌های HTTP ارتباط برقرار کنند. factory:

ثبت نمونه‌هایی از HttpClient برای هر کلاینت نامیده‌ شده‌ای که بصری‌تر است.

اجرای یک  Polly handler که به سیاست‌های Polly اجازه می‌دهد تا از Retry، CircuitBreakers و غیره استفاده کند.

پیکربندی حمل و نقل Kestrel

با انتشار ASP.NET Core 2.1، حمل و نقل پیش‌فرض Kestrel دیگر بر اساس Libuv نیست بلکه سوکت‌های مدیریت شده است.

سازنده هاست عمومی

سازنده هاست عمومی یا همان Generic Host Builder (HostBuilder) معرفی شده است. این سازنده می‌تواند برای برنامه‌هایی که درخواست‌های HTTP را پردازش نمی‌کنند (پیام‌ها و غیره) استفاده شود.

قالب‌های SPA به روز شده

قالب‌های برنامه‌های Single Page برای Angular ، React و React با Redux برای استفاده از ساختارهای استاندارد پروژه و ایجاد سیستم‌ها برای هر فریم‌ورکی آپدیت شده‌اند.

قالب انگولار بر اساس Angular CLI است، و قالب React بر اساس ساخت برنامه react است.

جستجوی Razor Pages برای Razor assetها

در 2.1، Razor Pages برای Razor assetها (مثل layoutها و پارشیال‌ها) در پوشه‌های لیست شده در زیر جستجو می‌شوند:

پوشه فعلی Pages

/Pages/Shared/

/Views/Shared/

Razor Pages در یک area

حالا Razor Pages از areaها پشتیبانی می‌کنند. برای اینکه نمونه‌ای از areaها را ببینید، یک Razor Pages web app جدید را با حساب کاربری شخصی ایجاد کنید. Razor Pages web app با حساب کاربری شخصی شامل /Areas/Identity/Pages است.