ASP.NET Core 2.1 có gì mới?

Bài viết này sẽ liệt kê những sự thay đổi đáng kể trong phiên bản ASP.NET Core 2.1 so với bản trước đó là 2.0

SignalR

SignalR đã được viết lại cho ASP.NET Core 2.1 bao gồm một số các cải tiến sau:

  • Mô hình dễ mở rộng
  • Một thư viện JavaScript mới không phụ thuộc Jquery.
  • Một giao thức nhị phân nhỏ gọn base trên MessagePack.
  • Hỗ trợ các giao thức tự xây dựng
  • Một mô hình phản hồi streaming mới.
  • Hỗ trợ client base trên WebSocket.

Xem thêm thông tin tại ASP.NET Core SignalR.

Thư viện Razor

ASP.NET Core 2.1 dễ dàng xây dựng và thêm các thành phần UI Razor vào trong một thư viện và chia sẻ ra nhiều project. Razor SDK mới cho phép xây dựng các file Razor trong một project class library có thể được đóng gói đưa vào Nuget. Các views và các pages trong các thư viện được tự động tìm thấy và có thể được ghi đè bởi ứng dụng. Bằng cách tích hợp việc biên dịch Razor khi build ứng dụng:

  • Thời gian khởi động ứng dụng nhanh hơn đáng kể.
  • Các cập nhật nhanh cho Razor view và các page ở thời điểm runtime vẫn có sẵn như một phần của quá trình phát triển.

Xem thêm thông tin tại Create reusable UI using the Razor Class Library project.

Thư viện Identity UI và scaffolding

ASP.NET Core 2.1 đưa ra ASP.NET Core Identity như là một Razor Class Library. Các ứng dụng có sử dụng Identity có thể apply tính năng Identity scaffolder để thêm các source code được chọn chứa trong Identity Razor Class Library (RCL). Bạn có thể muốn gen ra source code mà bạn có thể thay đổi và custom. Ví dụ, bạn có thể chỉ thị cho scaffolder gen ra code sử dụng để cho việc đăng ký thành viên. Gen ra code có thể được ưu tiên hơn so với code hiện tại trong Identity RCL.

Ứng dụng không bao gồm phần authentication có thể áp dụng Identity scaffolder cho việc thêm RCL Identity package. Bạn có tuỳ chọn để chọn Identity code để gen ra.

Xem thêm tại Scaffold Identity in ASP.NET Core projects.

HTTPS

Với việc tăng sự chú trọng vào bảo mật và riêng tư, việc cung cấp tính năng HTTPS cho ứng dụng web là rất quan trọng. HTTPS làm tăng sự bảo vệ cho web. Các trang web không sử dụng HTTPS được xem như là không bảo mật. Các trình duyệt (Chrome, Mozilla) đang bắt đầu đưa ra các tính năng mà bắt buộc phải xuất phát từ một môi trường bảo mật. GDPR yêu cầu sử dụng HTTPS để bảo vệ sự riêng tư của người dùng. Trong khi sử dụng HTTPS trong môi trường production là rất cần t hiết, việc sử dụng HTTPS trong môi trường phát triển có thể giúp ngăn ngừa các vấn đề trong việc deploy (ví dụ các đường link kém bảo mật). ASP.NET Core 2.1 bao gồm một số các cải tiến làm cho việc sử dụng HTTPS dễ dàng hơn trong môi trường phát triển và cấu hình HTTPS trong môi trường production. Chi tiết xem tại Enforce HTTPS

Mặc định

Để tạo một website bảo mật ngay từ lúc phát triển thì giờ đây HTTPS đã được enable mặc định. Bắt đầu từ 2.1, Kestrel lắng nghe từ cổng https://localhost:5001 khi một local certificate được dùng. Một certificate cho development được tạo ra:

  • Một phần của .NET Core SDK chạy lần đầu, khi bạn sử dụng SDK lần đầu.
  • Dùng tay sử dụng dev-certs tool.

Chạy dotnet dev-certs https --trust để sử dụng certificate.

Chuyển hướng và thực thi HTTPS

Các ứng dụng web thường sẽ cần lắng nghe cả HTTP và HTTPS nhưng sau đó sẽ redirect tất cả sang HTTPS. Trong 2.1, giới thiệu middleware thông minh sẽ tự redirect sang HTTPS theo cấu hình hoặc được gắn theo cổng của server.

Sử dụng HTTPS có thể thực thi HTTP Strict Transport Security Protocol (HSTS). HSTS chỉ thị cho các trình duyệt luôn truy cập site thông qua HTTPS. ASP.NET Core 2.1 thêm HSTS middleware hỗ trợ các tuỳ chọn cho max age, sub domain và HSTS sẽ load chúng từ trước.

Cấu hình trên môi trường production

Trong môi trường production, HTTPS phải được cấu hình tường minh. Trong 2.1 mặc định cấu hình cho HTTPS trên Kestrel được thêm vào. Các ứng dụng có thể được cấu hình cho việc sử dung:

GDPR

ASP.NET Core đưa ra các API và các template giúp đáp ứng một số yêu cầu từ EU General Data Protection Regulation (GDPR). Xem thêm thông tin GDPR support in ASP.NET Core. Một ứng dụng mẫu sample app demo cách làm sao để sử dụng và kiểm tra hầu hết các điểm trong GDPR và các API đưuọc thêm vào mẫu trong ASP.NET Core 2.1.

Test tích hợp

Một package mới được giới thiệu sẽ đảm nhận việc tạo test và thực thi. Microsoft.AspNetCore.Mvc.Testing package sẽ quản lý các công việc sau:

  • Sao chép các file liên quan (*. deps) từ ứng dụng được test sang thư mục bin folder của test project
  • Đặt thư mục gốc cho ứng dụng được test cho các file tĩnh và các page/view được tìm thấy khi test được thực thi.
  • Đưa ra  WebApplicationFactory class để khởi động ứng dụng được test với TestServer.

Test sử dụng xUnit để kiểm tra trang Index load với một trạng thái thành công và với đúng header 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());
    }
}

Xem thêm thông tin chi tiết tại Integration tests topic.

[ApiController], ActionResult

ASP.NET Core 2.1 thêm một quy tắc lập trình mới làm cho việc xây dựng một web API rõ ràng và dễ hiểu hơn. ActionResult<T> là một kiểu mới được thêm vào cho phép một ứng dụng trả về một kiểu response hoặc bất cứ kiểu kết quả nào (tương tự IactionResult), trong khi vẫn chỉ ra kiểu trả về. [ApiController] đã được thêm như một cách để tuỳ chọn quy tắc cho Web API.

Xem thêm tại Build Web APIs with ASP.NET Core.

IHttpClientFactory

ASP.NET Core 2.1 thêm vào một service IHttpClientFactory mới là giúp việc cấu hình và sử dụng instance của trong ứng dụng dễ dàng hơn. HttpClient đã khái quát một thành phần nắm uỷ quyền có thể liên kết với nhau cho việc gửi HTTP Request.

  • Tạo đăng ý của các thể hiện của HttpClient theo tên client trực quan hơn.
  • Triển khai một Polly handler cho phép các chính sách Polly sử dụng cho Retry, CircuitBreakers…

Xem thêm tại Initiate HTTP Requests.

Cấu hình Kestrel transport

Với việc phát hành ASP.NET Core 2.1, Kestrel transport mặc định không còn base trên Libuv nữa nhưng thay vào đó nó được base trên các socket được quản lý. Xem thêm tại Kestrel web server implementation: Transport configuration.

Generic host builder

Generic Host Builder (HostBuilder) đã được giới thiệu. Builder có thể sử dụng cho ứng dụng không xử lý HTTP Request (tin nhắn, các tác vụ nền…).

Xêm thêm .NET Generic Host.

Cập nhật SPA templates

The Single Page Application templates for Angular, React, and React with Redux are updated to use the standard project structures and build systems for each framework.

The Angular template is based on the Angular CLI, and the React templates are based on create-react-app. For more information, see Use the Single Page Application templates with ASP.NET Core.

Tìm kiếm Razor Pages cho Razor assets

Trong 2.1, Razor Pages tìm kiếm Razor assts (như là layout và các partial) trong các thư mục sau:

  1. Thư mục Pages hiện tại.
  2. /Pages/Shared/
  3. /Views/Shared/

Razor Pages trong Area

Razor Page đã hỗ trợ Area. Để nhìn thấy một area ví dụ, tạo một trang Razor Page trong web app với mode Indivisual User Account. Một Razor Web Pages với một user account sẽ bao gồm /Areas/Identity/Pages.

Migrate từ 2.0 lên 2.1

Hãy xem chi tiết cách Migrate from ASP.NET Core 2.0 to 2.1.

Thông tin bổ sung thêm

Để xem đầy đủ nhất mời bạn truy cập ASP.NET Core 2.1 Release Notes.


Trích nguồn từ: (docs.microsoft.com)

Lên trên