日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

[翻译] ASP.NET Core 3.0 的新增功能

發(fā)布時(shí)間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [翻译] ASP.NET Core 3.0 的新增功能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

全文翻譯自微軟官方文檔英文版?What's new in ASP.NET Core 3.0

本文重點(diǎn)介紹了 ASP.NET Core 3.0 中最重要的更改,并提供相關(guān)文檔的連接。

Blazor

Blazor 是 ASP.NET Core 中的一個(gè)新的框架,用于使用 .NET 構(gòu)建交互式的客戶端 Web UI:

  • 使用 C# 而不是 JavaScript 創(chuàng)建豐富的交互式 UI。

  • 共享用 .NET 編寫的服務(wù)器端和客戶端應(yīng)用程序邏輯。

  • 將 UI 渲染為 HTML 和 CSS,以提供廣泛的瀏覽器支持,包括移動(dòng)瀏覽器。

Blazor 框架支持的場(chǎng)景:

  • 可重用的 UI 組件(Razor 組件)

  • 客戶端路由

  • 組件布局

  • 對(duì)依賴注入的支持

  • 表單與驗(yàn)證

  • 使用 Razor 類庫(kù)構(gòu)建組件庫(kù)

  • JavaScript 互操作

有關(guān)更多信息,請(qǐng)參閱:ASP.NET Core 中的 Blazor 簡(jiǎn)介。

Blazor Server

Blazor 將組件渲染邏輯與 UI 更新的邏輯進(jìn)行了解耦。Blazor Server 支持在服務(wù)器上的 ASP.NET Core 應(yīng)用程序中承載 Razor 組件。UI 的更新通過(guò)一個(gè) SignalR 連接進(jìn)行處理。Blazor Server 在 ASP.NET Core 3.0 中受支持。

Blazor WebAssembly (預(yù)覽)

Blazor 應(yīng)用程序也可以使用基于 WebAssembly 的 .NET 運(yùn)行時(shí)直接在瀏覽器中運(yùn)行。Blazor WebAssembly 在 ASP.NET Core 3.0 中處于預(yù)覽狀態(tài),且不受支持。未來(lái)的 ASP.NET Core 版本將支持 Blazor WebAssembly。

Razor 組件

Blazor 應(yīng)用程序是由組件 (components) 構(gòu)建而成的。組件是自包含的用戶界面元素,例如頁(yè)面、對(duì)話框或者表單等。組件是普通的 .NET 類,用于定義 UI 呈現(xiàn)邏輯和客戶端事件處理程序。您可以創(chuàng)建沒有 JavaScript 的富交互式 Web 應(yīng)用程序。

Blazor 中的組件通常使用 Razor 語(yǔ)法編寫,它是 HTML 和 C# 的自然融合。Razor 組件與 Razor Pages(頁(yè)面)和 MVC 視圖 (view) 相似,因?yàn)樗鼈兌际褂?Razor。與基于“請(qǐng)求-響應(yīng)”模型的頁(yè)面與視圖不同,組件專門用于處理 UI 合成。

gRPC

gRPC:

  • 是一種流行的高性能 RPC(遠(yuǎn)程過(guò)程調(diào)用)框架。

  • 為 API 開發(fā)提供了一種“契約優(yōu)先“的方式。

  • 使用各種現(xiàn)代的技術(shù),例如:

    • 通過(guò) HTTP/2 傳輸

    • 使用 Protocol Buffers 作為接口描述語(yǔ)言

    • 二進(jìn)制序列化格式

  • 提供以下功能:

    • 身份驗(yàn)證

    • 雙向的數(shù)據(jù)流與流程控制

    • 取消與超時(shí)

ASP.NET Core 3.0 中的 gRPC 功能包括:

  • Grpc.AspNetCore?— 一個(gè)用于承載 gRPC 服務(wù)的 ASP.NET Core 框架。ASP.NET Core 上的 gRPC 能夠與日志記錄、依賴注入 (DI) 身份驗(yàn)證和授權(quán)等標(biāo)準(zhǔn)的 ASP.NET Core 功能集成在一起。

  • Grpc.Net.Client?— 一個(gè)面向 .NET Core,構(gòu)建在?HttpClient?上的 gRPC 客戶端。

  • Grpc.Net.ClientFactory?— 用于將 gRPC 客戶端與?HttpClientFactory?集成。

有關(guān)更多信息,參見:ASP.NET Core 上 gRPC 的簡(jiǎn)介

SignalR

請(qǐng)參見更新 Signal 代碼以獲取遷移說(shuō)明。SignalR 現(xiàn)在使用?System.Text.Json?來(lái)序列化/反序列化 JSON 消息。有關(guān)還原為基于?Newtonsoft.Json?的序列化程序的說(shuō)明,請(qǐng)參閱切換到 Newtonsoft.Json。

在 SignalR 的 JavaScript 和 .NET 客戶端中,添加了對(duì)自動(dòng)重新連接的支持。默認(rèn)情況下,客戶端嘗試自動(dòng)重新連接,并在 2, 10 和 30 秒后(如有必要)重試。如果客戶端成功重新連接,它將受到一個(gè)新的連接 ID。自動(dòng)重新連接是選擇性加入的:

const connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").withAutomaticReconnect().build();

可以通過(guò)傳遞基于毫秒的持續(xù)時(shí)間數(shù)組來(lái)指定重新連接間隔:

.withAutomaticReconnect([0, 3000, 5000, 10000, 15000, 30000])

可以傳入自定義實(shí)現(xiàn)以完全控制重新連接間隔。

如果在上次重新連接間隔之后重新連接失敗,則:

  • 客戶端認(rèn)為連接已離線。

  • 客戶端停止嘗試重新連接。

為了在連接中斷時(shí)提供 UI 反饋,SignalR 客戶端 API 已擴(kuò)展為包括以下事件處理程序:

  • onreconnecting: 為開發(fā)人員提供了禁用 UI 或告知用戶該應(yīng)用程序處于脫機(jī)狀態(tài)的機(jī)會(huì)。

  • onreconnected: 重新建立連接后,使開發(fā)人員有機(jī)會(huì)更新 UI。

以下代碼在嘗試連接時(shí)使用?onreconnecting?更新 UI:

connection.onreconnecting((error) => {const status = `Connection lost due to error "${error}". Reconnecting.`;document.getElementById("messageInput").disabled = true;document.getElementById("sendButton").disabled = true;document.getElementById("connectionStatus").innerText = status; });

以下代碼在連接恢復(fù)時(shí)使用?onreconnected?更新 UI:

connection.onreconnected((connectionId) => {const status = `Connection reestablished. Connected.`;document.getElementById("messageInput").disabled = false;document.getElementById("sendButton").disabled = false;document.getElementById("connectionStatus").innerText = status; });

當(dāng) hub 方法需要授權(quán)時(shí),SignalR 3.0 及更高版本為授權(quán)處理程序提供自定義資源。該資源是?HubInvocationContext?的實(shí)例。HubInvocationContext?包括:

  • HubCallerContext

  • 正在調(diào)用的 hub 方法的名稱。

  • hub 方法的參數(shù)。

考慮以下聊天室應(yīng)用程序示例,該應(yīng)用程序允許通過(guò) Azure Active Directory 進(jìn)行多個(gè)組織登錄。具有 Microsoft 賬戶的任何人都可以登錄聊天,但只有所屬組織的成員可以禁止用戶或查看用戶的聊天記錄。該應(yīng)用可以限制特定用戶的某些功能。

public class DomainRestrictedRequirement :AuthorizationHandler<DomainRestrictedRequirement, HubInvocationContext>,IAuthorizationRequirement {protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,DomainRestrictedRequirement requirement,HubInvocationContext resource){if (context.User?.Identity?.Name == null){return Task.CompletedTask;}if (IsUserAllowedToDoThis(resource.HubMethodName,context.User.Identity.Name)){context.Succeed(requirement);}return Task.CompletedTask;}private bool IsUserAllowedToDoThis(string hubMethodName, string currentUsername){if (hubMethodName.Equals("banUser",StringComparison.OrdinalIgnoreCase)){return currentUsername.Equals("bob42@jabbr.net",StringComparison.OrdinalIgnoreCase);}return currentUsername.EndsWith("@jabbr.net",StringComparison.OrdinalIgnoreCase));} }

在前面的代碼中,DomainRestrictedRequirement?用作自定義?IAuthorizationRequirement。由于傳遞了?HubInvocationContext?資源,因此內(nèi)部邏輯可以:

  • 檢查正在調(diào)用 hub 的上下文。

  • 決定是否允許用戶執(zhí)行特定的 hub 方法。

可以使用策略名稱來(lái)修飾各個(gè) hub 方法,代碼會(huì)在運(yùn)行時(shí)進(jìn)行檢查。當(dāng)客戶端嘗試調(diào)用各個(gè) hub 方法時(shí),DomainRestrictedRequirement?處理程序?qū)?huì)運(yùn)行并控制對(duì)方法的訪問(wèn)。基于?DomainRestrictedRequirement?控制訪問(wèn)的方式:

  • 所有已登錄用戶都可以調(diào)用?SendMessage?方法。

  • 只有使用?@jabbr.net?電子郵件地址登錄的用戶才能查看用戶的歷史記錄。

  • 只有?bob42@jabbr.net?可以禁止用戶進(jìn)入聊天室。

[Authorize] public class ChatHub : Hub {public void SendMessage(string message){}[Authorize("DomainRestricted")]public void BanUser(string username){}[Authorize("DomainRestricted")]public void ViewUserHistory(string username){} }

創(chuàng)建?DomainRestricted?策略可能涉及:

  • 在?Startup.cs?中添加新策略。

  • 將自定義的?DomainRestrictedRequirement?需求作為參數(shù)提供。

  • 使用授權(quán)中間件注冊(cè)?DomainRestricted。

services.AddAuthorization(options =>{options.AddPolicy("DomainRestricted", policy =>{policy.Requirements.Add(new DomainRestrictedRequirement());});});

SignalR hub 使用終結(jié)點(diǎn)路由. SignalR hub 連接先前已顯式地完成:

app.UseSignalR(routes => {routes.MapHub<ChatHub>("hubs/chat"); });

在以前的版本中,開發(fā)人員需要在各個(gè)不同的位置啟用控制器、Razor 頁(yè)面和 SignalR hub。顯式的連接導(dǎo)致一系列幾乎相同的路由片段:

app.UseSignalR(routes => {routes.MapHub<ChatHub>("hubs/chat"); });app.UseRouting(routes => {routes.MapRazorPages(); });

SignalR 3.0 hub 可以通過(guò)終結(jié)點(diǎn)路由進(jìn)行路由。使用終結(jié)點(diǎn)路由,通??梢栽?UseRouting?中配置所有的路由:

app.UseRouting(routes => {routes.MapRazorPages();routes.MapHub<ChatHub>("hubs/chat"); });

ASP.NET Core 3.0 SignalR 添加了:

客戶端到服務(wù)器的流。通過(guò)客戶端到服務(wù)器的流傳輸,服務(wù)器端方法可以采用?IAsyncEnumerable<T>或者?ChannelReader<T>?的實(shí)例。在以下 C# 實(shí)例中,hub 上的?UploadStream?方法將從客戶端接收字符串流:

public async Task UploadStream(IAsyncEnumerable<string> stream) {await foreach (var item in stream){} }

.NET 客戶端應(yīng)用程序可以將一個(gè)?IAsyncEnumerable<T>?或者?ChannelReader<T>?的實(shí)例作為上述?UploadStream?hub 方法的?stream?參數(shù)進(jìn)行傳遞。

在?for?循環(huán)完成,且本地函數(shù)退出之后,將流完成發(fā)送(After the?for?loop has completed and the local function exits, the stream completion is sent):

async IAsyncEnumerable<string> clientStreamData() {for (var i = 0; i < 5; i++){var data = await FetchSomeData();yield return data;} }await connection.SendAsync("UploadStream", clientStreamData());

JavaScript 客戶端應(yīng)用將 SignalR?Subject?(或者一個(gè)?RxJS Subject) 用于上述?UploadStream?hub 方法的?stream?參數(shù)。

let subject = new signalR.Subject(); await connection.send("StartStream", "MyAsciiArtStream", subject);

當(dāng) JavaScript 代碼捕獲到字符串并準(zhǔn)備將其發(fā)送到服務(wù)器時(shí),它可以使用?subject.next?方法來(lái)處理字符串。

subject.next("example"); subject.complete();

使用類似前面兩個(gè)代碼段的代碼,可以創(chuàng)建實(shí)時(shí)流式傳輸體驗(yàn)。

新的 JSON 序列化

現(xiàn)在默認(rèn)情況下,ASP.NET Core 3.0 使用?System.Text.Json?進(jìn)行 JSON 序列化:

  • 異步讀取和寫入 JSON。

  • 針對(duì) UTF-8 文本進(jìn)行了優(yōu)化。

  • 通常會(huì)比?Newtonsoft.Json?具有更高的性能。

要將 Json.NET 添加到 ASP.NET Core 3.0 請(qǐng)參閱添加基于 Newtonsoft.Json 的 JSON 格式支持。

新的 Razor 指令

以下列表包含了新的 Razor 指令:

  • @attribute?—?@attribute?指令將給定屬性應(yīng)用于生成頁(yè)面或者視圖的類。例如:@attribute [Authorize]。

  • @implements?—?@implements?指令為生成的類實(shí)現(xiàn)一個(gè)接口。例如:@implements IDisposable。

證書與 Kerberos 身份驗(yàn)證

證書身份驗(yàn)證要求:

  • 配置服務(wù)器以接收證書。

  • 在?Startup.Configure?中添加身份驗(yàn)證中間件。

  • 在?Startup.ConfigureServices?中添加證書身份驗(yàn)證服務(wù)。

public void ConfigureServices(IServiceCollection services) {services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme).AddCertificate();}public void Configure(IApplicationBuilder app, IHostingEnvironment env) {app.UseAuthentication();}

證書身份驗(yàn)證的選項(xiàng) (Options) 提供以下功能:

  • 接受自簽名證書。

  • 檢查證書吊銷。

  • 檢查提供的證書是否具有正確的使用標(biāo)志。

默認(rèn)的用戶主體 (user principal) 是根據(jù)證書屬性構(gòu)建的。用戶主體包含一個(gè)事件。通過(guò)相應(yīng)該事件,可以補(bǔ)充或者替換該主體。有關(guān)更多信息,請(qǐng)參見在 ASP.NET Core 中配置證書身份驗(yàn)證。

Windows 身份驗(yàn)證?已擴(kuò)展到了 Linux 和 macOS 上。在以前的版本中,Windows 身份驗(yàn)證僅限于?IIS?和?HttpSys。在 ASP.NET Core 3.0 中,Kestrel 能夠在 Windows, Linux 和 macOS 上為加入了 Windows 域的主機(jī)使用 Negotiate(協(xié)商), Kerberos?和?NTLM。Kestrel 對(duì)這些身份驗(yàn)證架構(gòu)的支持由?Microsoft.AspNetCore.Authentication.Negotiate NuGet?包提供。與其他身份驗(yàn)證服務(wù)一樣,在用用程序范圍內(nèi)配置身份驗(yàn)證,然后配置服務(wù):

public void ConfigureServices(IServiceCollection services) {services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();}public void Configure(IApplicationBuilder app, IHostingEnvironment env) {app.UseAuthentication();}

主機(jī)要求:

  • Windows 主機(jī)必須將服務(wù)主體名稱?(SPN) 添加到承載該應(yīng)用程序的用戶賬戶中。

  • Linux 和 macOS 主機(jī)必須加入域。

    • 必須為 Web 進(jìn)程創(chuàng)建 SPN。

    • 必須在主機(jī)上生成和配置密鑰表文件。

有關(guān)更多信息,請(qǐng)參見在 ASP.NET Core 中配置 Windows 身份驗(yàn)證。

模板變更

Web UI 模板(Razor Pages, 帶有控制器和視圖的 MVC)已刪除以下內(nèi)容:

  • “Cookie 同意” UI 不再包含在內(nèi)。若要在 ASP.NET Core 3.0 模板生成的應(yīng)用程序中啟用“Cookie 同意”功能,請(qǐng)參閱?ASP.NET Core 中的常規(guī)數(shù)據(jù)保護(hù)法規(guī) (GDPR) 支持。

  • 現(xiàn)在,腳本和相關(guān)的靜態(tài)資產(chǎn)被作為本地文件引用,而不再使用 CDN。有關(guān)更多信息,請(qǐng)參見腳本和相關(guān)的靜態(tài)資產(chǎn)現(xiàn)在被作為本地文件引用而不再使用 CDN (aspnet/AspNetCore.Docs #14350)。

Angular 模板已更新為使用 Angular 8。

默認(rèn)情況下,Razor 類庫(kù) (RCL) 模板默認(rèn)為用于 Razor 組件開發(fā)。Visual Studio 中新的模板選項(xiàng)為頁(yè)面和視圖提供模板支持。在命令行中從模板創(chuàng)建 RCL 時(shí),請(qǐng)傳入?-support-pages-and-views?選項(xiàng) (dotnet new razorclasslib -support-pages-and-views)。

通用主機(jī)

ASP.NET Core 3.0 模板使用?.NET 通用主機(jī)。以前的版本使用?WebHostBuilder。使用 .NET Core 通用主機(jī)(HostBuilder),可以更好地將 ASP.NET Core 應(yīng)用程序與其他非特定與 Web 的服務(wù)器方案集成。有關(guān)更多信息,請(qǐng)參見?HostBuilder 替換 WebHostBuilder。

主機(jī)配置

在發(fā)布 ASP.NET Core 3.0 之前,帶有?ASPNETCORE_?前綴的環(huán)境變量會(huì)被加載,用于 Web 主機(jī)的主機(jī)配置。在 3.0 中,AddEvironmentVariables?用于加載帶有?DOTNET_?以前追的環(huán)境變量,以使用?CreateDefaultBuilder?進(jìn)行主機(jī)配置。

Startup 構(gòu)造函數(shù)注入的更改

通用主機(jī)僅支持一下類型的?Startup?構(gòu)造函數(shù)注入:

  • IHostEnvironment

  • IWebHostEnvironment

  • IConfiguration

仍然可以將所有服務(wù)以參數(shù)的形式直接注入?Startup.Configure?方法,參見?通用主機(jī)限制 Startup 構(gòu)造函數(shù)注入 (aspnet/Announcements #353).

Kestrel

  • 為了遷移到通用主機(jī),Kestrel 配置已更新。在 3.0 中,Kestrel 在?ConfigureWebHostDefaults?提供的 Web 主機(jī)構(gòu)建器 (host builder) 上進(jìn)行配置。

  • 連接適配器 (Connection Adapter) 已從 Kestrel 中刪除,并由連接中間件代替 (Connection Middleware)。該中間件類似于 ASP.NET Core 管道中的 HTTP 中間件,但用于較低級(jí)別的連接。

  • Kestrel 傳輸層已在?Connections.Abstractions?中作為公共接口公開。

  • 標(biāo)頭 (header) 和尾部 (trailer) 之間的歧義已通過(guò)將尾部標(biāo)頭 (trailing header) 移動(dòng)到新的集合來(lái)解決。

  • 同步 IO API(例如?HttpRequest.Body.Read)是引起線程饑餓進(jìn)而導(dǎo)致程序崩潰的常見原因。在 3.0 中,默認(rèn)情況下?AllowSynchronousIO?被禁用。

有關(guān)更多信息,請(qǐng)參見Kestrel - 從 ASP.NET Core 2.2 遷移到 3.0。

默認(rèn)啟用 HTTP/2

默認(rèn)情況下,Kestrel 中為 HTTPS 端點(diǎn)啟用了 HTTP/2。當(dāng)操作系統(tǒng)支持時(shí),對(duì) IIS 或者 HTTP.sys 的 HTTP/2 的支持將被啟用。

請(qǐng)求計(jì)數(shù)器

Hosting EventSource (Microsoft.AspNetCore.Hosting) 發(fā)出與傳入請(qǐng)求有關(guān)的以下 EventCounter:

  • requests-per-second

  • total-requests

  • current-requests

  • failed-requests

終結(jié)點(diǎn)路由

終結(jié)點(diǎn)路由得到了增強(qiáng),該路由使各種框架(例如 MVC)可以與中間件更好地協(xié)同工作:

  • 中間件和終結(jié)點(diǎn)的順序可以在?Startup.Configure?的請(qǐng)求處理管道中進(jìn)行配置。

  • 終結(jié)點(diǎn)和中間件與其他基于 ASP.NET Core 的技術(shù)(例如運(yùn)行狀況檢查)進(jìn)行良好的編排。

  • 終結(jié)點(diǎn)可以在中間件和 MVC 中實(shí)現(xiàn)各種策略,例如 CORS 或者授權(quán)等。

  • 過(guò)濾器和特性 (attribute) 可以被放置在控制器的方法上。

有關(guān)更多信息,請(qǐng)參見?ASP.NET Core 中的路由。

運(yùn)行狀況檢查

運(yùn)行狀況檢查通過(guò)通用主機(jī)使用終結(jié)點(diǎn)路由。在?Startup.Configure?中,使用終結(jié)點(diǎn) URL 或者相對(duì)路徑,在終結(jié)點(diǎn)構(gòu)建器上調(diào)用?MapHealthChecks:

app.UseEndpoints(endpoints => {endpoints.MapHealthChecks("/health"); });

運(yùn)行狀況檢查終結(jié)點(diǎn)可以:

  • 指定一個(gè)或多個(gè)允許的主機(jī)/端口。

  • 要求授權(quán)。

  • 要求 CORS。

有關(guān)更多信息,請(qǐng)參見以下文章:

  • 運(yùn)行狀況檢查 - 從 ASP.NET Core 2.2 遷移到 3.0

  • ASP.NET Core 中的運(yùn)行狀況檢查

HttpContext 上的管道

現(xiàn)在可以使用?System.IO.Pipelines?API 讀取請(qǐng)求正文并寫入響應(yīng)正文。HttpRequest.BodyReader?屬性提供了一個(gè)?PipeReader,可以用于讀取請(qǐng)求正文;HttpResponse.BodyWriter?屬性提供了一個(gè)?PipeWriter,可以用于寫入響應(yīng)正文。HttpRequest.BodyReader?是?HttpRequest.Body?流的相似物;?HttpResponse.BodyWriter?是?HttpResponse.Body?流的相似物。

IIS 中改進(jìn)了的錯(cuò)誤報(bào)告

現(xiàn)在,在 IIS 中托管 ASP.NET Core 應(yīng)用程序時(shí)的啟動(dòng)錯(cuò)誤會(huì)生成更豐富的診斷數(shù)據(jù)。這些錯(cuò)誤會(huì)在適用的情況下使用堆棧跟蹤,報(bào)告給 Windows 事件日志。此外,所有的警告、錯(cuò)誤和未處理的異常,都會(huì)記錄到 Windows 事件日志中。

服務(wù)角色服務(wù)和輔助角色 SDK

.NET Core 3.0 引入了新的輔助角色服務(wù) (Worker Service) 應(yīng)用模板。該模板是在 .NET Core 中編寫長(zhǎng)時(shí)間運(yùn)行的服務(wù)的起點(diǎn)。

有關(guān)更多信息,請(qǐng)參見:

  • 作為 Windows 服務(wù)運(yùn)行的 .NET Core 輔助角色 (.NET Core Workers as Windows Services)

  • 在 ASP.NET Core 中使用托管服務(wù)實(shí)現(xiàn)后臺(tái)任務(wù)

  • 在 Windows 服務(wù)中承載 ASP.NET Core

Forwarded 標(biāo)頭中間件的改進(jìn)

在早期版本的 ASP.NET Core 中,應(yīng)用在部署到 Azure Linux 或者除 IIS 之外的任何反向代理之后,調(diào)用?UseHsts?和?UseHttpsRedirection?都是有問(wèn)題的。轉(zhuǎn)發(fā) Linux 和非 IIS 反向代理的方案中介紹了以前版本的修復(fù)方式。

此場(chǎng)景已在 ASP.NET Core 3.0 中修復(fù)。當(dāng)?ASPNETCORE_FORWARDEDHEADERS_ENABLED?環(huán)境變量設(shè)置為?true?時(shí),主機(jī)將啟用?Forwarded 標(biāo)頭中間件。在 ASP.NET Core 的容器鏡像中,ASPNETCORE_FORWARDEDHEADERS_ENABLED?已被設(shè)置為?true。

性能提升

ASP.NET Core 3.0 包括許多改進(jìn),可以減少內(nèi)存使用并提高吞吐量:

  • 在將內(nèi)置的依賴注入容器用于 scoped 服務(wù)時(shí),減少內(nèi)存的使用量。

  • 減少整個(gè)框架的內(nèi)存分配,包括中間件的各類場(chǎng)景和路由。

  • 減少 WebSocket 連接的內(nèi)存使用量。

  • 減少 HTTPS 連接的內(nèi)存使用量,并提高吞吐量。

  • 新的、經(jīng)過(guò)優(yōu)化的、完全異步的 JSON 序列化器。

  • 減少表單 (form) 解析的內(nèi)存使用量,并提高吞吐量。

ASP.NET Core 3.0 僅可在 .NET Core 3.0 上運(yùn)行

從 ASP.NET Core 3.0開始,.NET Framework 不再是受支持的目標(biāo)框架。以 .NET Framework 為目標(biāo)的項(xiàng)目可以繼續(xù)通過(guò)使用?.NET Core 2.1 LTS 版本在完全受支持的狀態(tài)下運(yùn)行。絕大多數(shù)與 ASP.NET Core 2.1.x 相關(guān)的軟件包,都將在 .NET Core 2.1 的三年長(zhǎng)期支持期內(nèi)獲得支持。(Most ASP.NET Core 2.1.x related packages will be supported indefinitely, beyond the 3 year LTS period for .NET Core 2.1.)

有關(guān)遷移的更多信息,請(qǐng)參見?將代碼從 .NET Framework 移植到 .NET Core。

使用 ASP.NET Core 共享框架

Microsoft.AspNetCore.App 元包中包含的 ASP.NET Core 3.0 共享框架 (shared framework) 不再需要項(xiàng)目文件中的顯式?<PackageReference />?元素。在項(xiàng)目文件中使用?Microsoft.NET.Sdk.Web?SDK 時(shí),將自動(dòng)引用共享框架:

<Project Sdk="Microsoft.NET.Sdk.Web">

從 ASP.NET Core 共享框架中移除的程序集

從 ASP.NET Core 3.0 共享程序集中移除的最值得注意的程序集是:

  • Newtonsoft.Json?(Json.NET)。要將 Json.NET 添加到 ASP.NET Core 3.0,請(qǐng)參閱?添加基于 Newtonsoft.Json 的 JSON 格式支持。ASP.NET Core 3.0 引入了?System.Text.Json?來(lái)讀寫 JSON。有關(guān)更多信息,請(qǐng)參閱本文檔中新的 JSON 序列化。

  • Entity Framework Core

有關(guān)共享框架中所移除程序集的完整列表,請(qǐng)參閱?從 Microsoft.AspNetCore.App 3.0 中移除的程序集。有關(guān)進(jìn)行此修改的動(dòng)機(jī),更多信息請(qǐng)參閱Microsoft.AspNetCore.App 在 3.0 中的破壞性變更?和?ASP.NET Core 3.0 中的更改初探。

原文鏈接:https://www.cnblogs.com/vxchin/p/whats-new-in-asp-net-core-3-0.html


.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總?http://www.csharpkit.com?

總結(jié)

以上是生活随笔為你收集整理的[翻译] ASP.NET Core 3.0 的新增功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。