ASP.NET Core 3.1 的新功能

本文會重點說明 ASP.NET Core 3.1 最重要的變更,附有相關文件的連結。

Razor 元件的部分類別支援

Razor 元件現在會產生為部分類別。 Razor 元件的程式碼可以使用定義為部分類別的程式碼後置檔案撰寫,而不是在單一檔案中定義元件的所有程式碼。 如需詳細資訊,請參閱部分類別支援

元件標記協助程式並將參數傳遞至最上層元件

在 Blazor ASP.NET Core 3.0 中,元件會使用 HTML 協助程式 (Html.RenderComponentAsync) 轉譯成頁面和檢視。 在 ASP.NET Core 3.1 中,使用新的元件標記協助程式,從頁面或檢視轉譯元件:

<component type="typeof(Counter)" render-mode="ServerPrerendered" />

ASP.NET Core 3.1 仍支援 HTML 協助程式,但建議使用元件標記協助程式。

Blazor Server 應用程式現在可以在初始轉譯期間,將參數傳遞至最上層元件。 先前,您只能使用 RenderMode.Static 將參數傳遞至最上層元件。 在此版本中,RenderMode.ServerRenderMode.ServerPrerendered 都受到支援。 任何指定的參數值都會序列化為 JSON,並包含在初始回應中。

例如,以遞增量 (IncrementAmount) 預先轉譯 Counter 元件:

<component type="typeof(Counter)" render-mode="ServerPrerendered" 
    param-IncrementAmount="10" />

如需詳細資訊,請參閱將元件整合至 Razor Pages 和 MVC 應用程式

支援 HTTP.sys 中的共用佇列

HTTP.sys 支援建立匿名要求佇列。 在 ASP.NET Core 3.1 中,我們已新增建立或附加至現有具名 HTTP.sys 要求佇列的功能。 建立或附加至現有的具名 HTTP.sys 要求佇列,可以讓擁有佇列的 HTTP.sys 控制器處理序與接聽程式處理序各自獨立。 此獨立性可讓您在接聽程式處理序各次重新啟動之間,保留現有的連線和已排入佇列的要求:

public static IHostBuilder CreateHostBuilder(string[] args) =>
     Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            // ...
            webBuilder.UseHttpSys(options =>
            {
                options.RequestQueueName = "MyExistingQueue";
                options.RequestQueueMode = RequestQueueMode.CreateOrAttach;
            });
        });

SameSite cookie 的重大變更

SameSite cookie 的行為已變更,以反映即將推出的瀏覽器變更。 這可能會影響 AzureAd、OpenIdConnect 或 WsFederation 等驗證案例。 如需詳細資訊,請參閱在 ASP.NET Core 中使用 SameSite cookie

防止 Blazor 應用程式事件的預設動作

請使用 @on{EVENT}:preventDefault 指示詞屬性來防止事件的預設動作。 在下列範例中,系統會防止在文字方塊中顯示按鍵字元的這項預設動作:

<input value="@_count" @onkeypress="KeyHandler" @onkeypress:preventDefault />

如需詳細資訊,請參閱防止預設動作

停止 Blazor 應用程式中的事件傳播

請使用 @on{EVENT}:stopPropagation 指示詞屬性來停止事件傳播。 在下列範例中,選取核取方塊可防止從子系 <div> 傳播 Click 事件至父代 <div>

<input @bind="_stopPropagation" type="checkbox" />

<div @onclick="OnSelectParentDiv">
    <div @onclick="OnSelectChildDiv" @onclick:stopPropagation="_stopPropagation">
        ...
    </div>
</div>

@code {
    private bool _stopPropagation = false;
}

如需詳細資訊,請參閱停止事件傳播

Blazor 應用程式開發期間的詳細錯誤

當 Blazor 應用程式在開發期間無法正常運作時,接收來自應用程式的詳細錯誤資訊可協助進行疑難排解並修正問題。 發生錯誤時,Blazor 應用程式會在畫面底部顯示金色列:

  • 在開發期間,金色列會將您導向瀏覽器主控台,您可以在該處看到例外狀況。
  • 在生產環境中,金色列會通知使用者發生錯誤,並建議重新整理瀏覽器。

如需詳細資訊,請參閱處理 ASP.NET Core Blazor 應用程式中的錯誤