ASP.NET Core 2.1 的新增功能

2019-04-17 08:56 更新

SignalR

已針對 ASP.NET Core 2.1 重新編寫 SignalR。 ASP.NET Core SignalR 包含大量改進:

  • 簡化橫向擴展模型。
  • 新 JavaScript 客戶端不具有 jQuery 依賴項。
  • 新緊湊型二進制協(xié)議基于 MessagePack。
  • 支持自定義協(xié)議。
  • 新的流式處理響應(yīng)模型。
  • 支持基于裸機 WebSocket 的客戶端。

有關(guān)詳細信息,請參閱 ASP.NET Core SignalR

Razor 類庫

通過 ASP.NET Core 2.1 可以更容易地在庫中生成和包括基于 Razor 的 UI,并跨多個項目共享 UI。 新 Razor SDK 支持將 Razor 文件生成到可打包為 NuGet 包的類庫項目中。 應(yīng)用可以自動發(fā)現(xiàn)和覆蓋庫中的視圖和頁面。 通過將 Razor 編譯集成到生成中:

  • 應(yīng)用啟動時間可顯著加快。
  • 在迭代開發(fā)工作流過程中,仍可在運行時快速更新 Razor 視圖和頁面。

有關(guān)詳細信息,請參閱使用 Razor 類庫項目創(chuàng)建可重用 UI。

標識 UI 庫和基架

ASP.NET Core 2.1 提供 ASP.NET Core 標識作為 Razor 類庫。 包含標識的應(yīng)用可以應(yīng)用新的標識基架,以便有選擇地添加標識 Razor 類庫 (RCL) 中包含的源代碼。 建議生成源代碼,以便修改代碼和更改行為。 例如,可以指示基架生成在注冊過程中使用的代碼。 生成的代碼優(yōu)先于標識 RCL 中的相同代碼。

不包含身份驗證的應(yīng)用可以應(yīng)用標識基架以添加 RCL 標識包。 可以選擇要生成的標識代碼。

有關(guān)詳細信息,請參閱 ASP.NET Core 項目中的基架標識

HTTPS

隨著對安全和隱私的關(guān)注度日益增加,為 Web 應(yīng)用啟用 HTTPS 變得非常重要。 Web 上正在越來越嚴格要求強制使用 HTTPS。 不使用 HTTPS 的站點會被視為不安全的站點。 瀏覽器(Chromium、Mozilla)開始強制要求必須在安全的上下文中使用 Web 功能。 GDPR 要求使用 HTTPS 保護用戶隱私。 不僅在生產(chǎn)環(huán)境中使用 HTTPS 至關(guān)重要,而且在開發(fā)環(huán)境中使用 HTTPS 還可以幫助防止部署中的各種問題(例如,不安全的鏈接)。 ASP.NET Core 2.1 包含大量改進,更方便在開發(fā)環(huán)境使用 HTTPS 和在生產(chǎn)環(huán)境配置 HTTPS。 有關(guān)詳細信息,請參閱強制使用 HTTPS。

默認開啟

為了提高網(wǎng)站開發(fā)的安全性,現(xiàn)在默認啟用 HTTPS。 從 2.1 開始,當本地具有開發(fā)證書時,Kestrel 將偵聽 https://localhost:5001。 關(guān)于開發(fā)證書的創(chuàng)建:

  • 首次使用 SDK 時,在首次運行 .NET Core SDK 時會創(chuàng)建開發(fā)證書。
  • 手動使用新 dev-certs 工具。

運行 dotnet dev-certs https --trust 以信任證書。

HTTPS 重定向和強制使用

Web 應(yīng)用通常需要偵聽 HTTP 和 HTTPS,但隨后會將所有 HTTP 流量重定向到 HTTPS。 在 2.1 中,引入了專用的 HTTPS 重定向中間件,可根據(jù)配置或綁定服務(wù)器端口的存在智能執(zhí)行重定向。

使用 HTTP 嚴格傳輸安全協(xié)議 (HSTS) 可進一步強制使用 HTTPS。 HSTS 指示瀏覽器始終通過 HTTPS 訪問站點。 ASP.NET Core 2.1 添加 HSTS 中間件,該中間件支持選擇最大年限、子域和 HSTS 預加載列表。

適用于生產(chǎn)環(huán)境的配置

在生產(chǎn)環(huán)境中,必須顯式配置 HTTPS。 在 2.1 中,添加了針對 Kestrel 配置 HTTPS 的默認配置架構(gòu)??梢詫?yīng)用配置為使用:

GDPR

ASP.NET Core 提供 API 和模板,幫助滿足歐盟一般數(shù)據(jù)保護條例 (GDPR) 的部分要求。 有關(guān)詳細信息,請參閱 ASP.NET Core 中的 GDPR 支持。 示例應(yīng)用演示如何使用并允許測試已添加到 ASP.NET Core 2.1 模板中的大多數(shù) GDPR 擴展點和 API。

集成測試

引入了可簡化創(chuàng)建和執(zhí)行測試的新包。 Microsoft.AspNetCore.Mvc.Testing 包可處理以下任務(wù):

  • 將依賴項文件 (*.deps) 從已測試的應(yīng)用復制到測試項目的 bin 文件夾中。
  • 將內(nèi)容根目錄設(shè)置為已測試應(yīng)用的項目根目錄,以便可在執(zhí)行測試時找到靜態(tài)文件和頁面/視圖。
  • 提供 WebApplicationFactory 類,以簡化已測試應(yīng)用在 TestServer 中的啟動過程。

以下測試使用 xUnit 檢查索引頁是否加載了成功狀態(tài)代碼和正確的 Content-Type 標頭:

C#

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());
    }
}

有關(guān)詳細信息,請參閱集成測試主題。

[ApiController], ActionResult<T>

ASP.NET Core 2.1 添加了新編程約定,方便構(gòu)建簡潔的說明性 Web API。 ActionResult<T> 是一個新增類型,可允許應(yīng)用返回響應(yīng)類型,或返回任何其他操作結(jié)果(與 IActionResult 相似),同時仍然指示響應(yīng)類型。 此外還添加了 [ApiController] 特性,作為選擇加入特定于 Web API 的約定和行為的方式。

有關(guān)詳細信息,請參閱使用 ASP.NET Core 構(gòu)建 Web API

IHttpClientFactory

ASP.NET Core 2.1 引入了新的 IHttpClientFactory 服務(wù),方便在應(yīng)用中配置和使用 HttpClient 的實例。 HttpClient 已經(jīng)具有委托處理程序的概念,這些委托處理程序可以鏈接在一起,處理出站 HTTP 請求。 工廠可以:

  • 使根據(jù)已命名客戶端注冊 HttpClient 的實例變得更直觀。
  • 實現(xiàn)一個 Polly 處理程序,允許將 Polly 策略用于 Retry、CircuitBreakers 等。

有關(guān)詳細信息,請參閱啟動 HTTP 請求。

Kestrel 傳輸配置

對于 ASP.NET Core 2.1 版,Kestrel 默認傳輸不再基于 Libuv,而是基于托管的套接字。 有關(guān)詳細信息,請參閱 Kestrel Web 服務(wù)器實現(xiàn):傳輸配置。

通用主機生成器

引入了通用主機生成器 (HostBuilder)。 此生成器可用于不處理 HTTP 請求(消息傳送、后臺任務(wù)等等)的應(yīng)用。

有關(guān)詳細信息,請參閱 .NET 通用主機

更新的 SPA 模板

更新了適用于 Angular、React 和 React 結(jié)合 Redux 的單頁應(yīng)用程序模板,以使用標準項目結(jié)構(gòu)和為每個框架構(gòu)建系統(tǒng)。

Angular 模板基于 Angular CLI,而 React 模板基于 create-react-app。

有關(guān)詳細信息,請參見:

Razor Pages 搜索 Razor 資產(chǎn)

在 2.1 中,Razor Pages 按所列順序搜索以下目錄中的 Razor 資產(chǎn)(例如布局和分區(qū)):

  1. 當前 Pages 文件夾。
  2. /Pages/Shared/
  3. /Views/Shared/

某個區(qū)域內(nèi)的 Razor Pages

Razor Pages 現(xiàn)在支持區(qū)域。 要查看區(qū)域示例,請使用個人用戶帳戶創(chuàng)建新 Razor Pages Web 應(yīng)用。使用個人用戶帳戶的 Razor Pages Web 應(yīng)用包括 /Areas/Identity/Pages。

MVC 兼容性版本

SetCompatibilityVersion 方法允許應(yīng)用選擇加入或退出 ASP.NET Core MVC 2.1 或更高版本中引入的潛在中斷行為變更。

有關(guān)更多信息,請參見ASP.NET Core MVC 的兼容性版本。

從 2.0 遷移到 2.1

請參閱從 ASP.NET Core 2.0 遷移到 2.1。

其他信息

要獲取完整的更改列表,請參閱 ASP.NET Core 2.1 發(fā)行說明。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號