.NET 8 Release Candidate 1 (RC1)發布:ASP.NET Core重大改進來襲!
近日,.NET 8 Release Candidate 1 (RC1)正式發布,這是在今年晚些時候計劃發布的最終 .NET 8 版本之前的兩個候選版本中的第一個。此版本包含了大部分計劃中的功能和變更,可供開發者提前嘗鮮。不過,部分領域(尤其是 Blazor)仍有重大變更待完成,預計將在下一個 .NET 8 候選版本中落地。
新功能概覽
服務器和中間件
默認情況下,HTTP/3 被禁用。此前啟用 HTTP/3 時,某些防病毒軟件會在啟動帶有調試的應用程序時提示是否允許網絡訪問,影響開發體驗。因此,此次恢復到 .NET 7 的行為。若要重新啟用 HTTP/3,可通過以下兩種方式:
為每個端點設置
var builder = WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel((context, options) =>
{options.ListenAnyIP(5001, listenOptions =>{listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;listenOptions.UseHttps();});
});
配置默認協議
var builder = WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel((context, options) =>
{options.ConfigureEndpointDefaults(listenOptions =>{listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;listenOptions.UseHttps();});
});
API 編寫
在最小 API、MVC 和 SignalR 中支持鍵入服務。從 .NET 8 RC1 起,開發者可使用 [FromKeyedServices("keyName")]
屬性注釋目標參數來利用此特性。示例代碼如下:
using Microsoft.AspNetCore.Mvc;var builder = WebApplication.CreateBuilder(args);builder.Services.AddKeyedSingleton<ICache, BigCache>("big");
builder.Services.AddKeyedSingleton<ICache, SmallCache>("small");
builder.Services.AddControllers();var app = builder.Build();app.MapGet("/big", ([FromKeyedServices("big")] ICache bigCache) => bigCache.Get("date"));app.MapGet("/small", ([FromKeyedServices("small")] ICache smallCache) => smallCache.Get("date"));app.MapControllers();app.Run();public interface ICache
{object Get(string key);
}
public class BigCache : ICache
{public object Get(string key) => $"Resolving {key} from big cache.";
}public class SmallCache : ICache
{public object Get(string key) => $"Resolving {key} from small cache.";
}[ApiController]
[Route("/cache")]
public class CustomServicesApiController : Controller
{[HttpGet("big-cache")]public ActionResult<object> GetOk([FromKeyedServices("big")] ICache cache){return cache.Get("data-mvc");}
}public class MyHub : Hub
{public void Method([FromKeyedServices("small")] ICache cache){Console.WriteLine(cache.Get("signalr"));}
}
Blazor
Blazor Web App 模板更新
在 .NET 8 中,Blazor 功能不斷增強,可滿足各類 Web UI 需求。現在,可根據請求靜態地從服務器呈現 Blazor 組件,還能實現體驗增強、導航和表單處理增強等功能。為優化加載時間,Blazor 能在運行時自動選擇使用 Blazor Server 或 Blazor WebAssembly。
此版本中,Blazor Web App 模板得到清理和改進,新增多個配置選項:
- 使用交互式 WebAssembly 組件:支持基于 Blazor WebAssembly 的交互式 WebAssembly 渲染模式。
- 使用交互式 Server 組件:支持基于 Blazor Server 的交互式 Server 渲染模式。
- 包括示例頁面:選擇后,項目將包含基于 Bootstrap 樣式的示例頁面和布局;若只需空項目,可禁用該選項。
若同時選擇 WebAssembly 和 Server 渲染模式,模板將使用自動渲染模式,先使用 Server 模式,待運行時下載完成后切換到 WebAssembly 渲染模式。
此外,模板的文件結構和組件也有諸多改進,如組件名稱和內容清理、移除不必要的屬性等,簡化了應用程序交互性的實現過程。
從額外的程序集中發現用于靜態服務器呈現的組件
可使用 AddAdditionalAssemblies()
方法配置額外程序集,用于發現靜態服務器呈現的 Blazor 組件:
app.MapRazorComponents<App>().AddAdditionalAssemblies(typeof(Counter).Assembly);
路由改進
Blazor 路由實現與 ASP.NET Core 路由統一,為 Blazor 路由器添加了復雜段、默認值和所有內置路由約束的支持。
觸發頁面刷新
調用 NavigationManager.Refresh()
可觸發頁面刷新,若可能使用增強的頁面導航刷新,否則觸發完整頁面刷新;使用 NavigationManager.Refresh(forceReload: true)
可強制執行完整頁面刷新。
將任意屬性傳遞給 QuickGrid
QuickGrid
組件現在可將額外屬性傳遞給呈現的元素:
<QuickGrid Items="@FilteredPeople" custom-attribute="somevalue" class="custom-class-attribute">
確定表單字段是否具有相關的驗證消息
新 API EditContext.IsValid(FieldIdentifier)
可用于確定字段是否有效,無需獲取驗證消息。
配置.NET WebAssembly 運行時
可在運行時使用 configureRuntime
函數配置 WebAssembly 上的各種 .NET 運行時選項:
<script>Blazor.start({configureRuntime: dotnet => {dotnet.withEnvironmentVariable("CONFIGURE_RUNTIME", "true");}});
</script>
在預先編譯(AOT)編譯后修剪.NET IL
新的 MSBuild 選項可在執行預先編譯(AOT)到 WebAssembly 后刪除編譯方法的 .NET IL,測試顯示可將 _framework 文件夾大小減小 1.7% 到 4.2%:
<PropertyGroup><RunAOTCompilation>true</RunAOTCompilation><WasmStripILAfterAOT>true</WasmStripILAfterAOT>
</PropertyGroup>
Identity
移除 username
屬性,簡化映射的身份 API,使用戶名和電子郵件相同。
單頁應用程序(SPA)
Visual Studio 模板用于使用 ASP.NET Core 與流行前端 JavaScript 框架(如 Angular、React 和 Vue)時,支持標準的 .NET 模板選項,如指定目標 .NET 框架版本、啟用 OpenAPI 支持等。
度量
在 .NET 8 RC1 中,新的度量重命名以遵循 OpenTelemetry Semantic Conventions。此更改基于用戶和庫作者的反饋,有助于 .NET 的內置度量和更廣泛的 .NET 生態系統遵循現有標準。例如,ASP.NET Core 的主要 HTTP 度量與 OpenTelemetry 的計數器完全匹配,其他計數器也使用語義約定的命名標準。
已知問題
ASP.NET Redis 基于輸出緩存
在 ASP.NET 中,基于 Redis 的輸出緩存存在回歸問題,此功能在 RC1 中無法工作,不過已找到原因并將在 RC2 中解決。
Blazor Web App 模板創建多個計數器組件
啟用交互式 WebAssembly 組件時,模板生成了不必要的組件。可將服務器項目中的組件指令復制到客戶端項目后刪除該組件,然后在 Program.cs 中調用 Counter 以發現該組件。
開始使用
若要使用 .NET 8 RC1 中的 ASP.NET Core,需安裝 .NET 8 SDK。使用 Windows 并使用 Visual Studio 的開發者,建議安裝最新的 Visual Studio 2022 預覽版;使用 Visual Studio Code 的開發者,可嘗試新的 C# Dev Kit。
若要將現有的 ASP.NET Core 應用程序從 .NET 8 預覽 7 升級到 .NET 8 RC1,需將應用程序的目標框架更新為 .net8.0
,并將所有 Microsoft.AspNetCore.* 和 Microsoft.Extensions.* 包引用更新為 .8.0.0-rc.1.*
。同時,建議查看 ASP.NET Core .NET 8 中的破壞性變更的完整列表。
總體而言,.NET 8 Release Candidate 1 (RC1) 為 ASP.NET Core 帶來了眾多實用的新功能和改進,盡管存在一些已知問題,但仍值得開發者提前嘗試,為后續項目開發做好準備。開發者可通過在 GitHub 上提交問題,反饋對這些新改進的看法。 ======================================================================
前些天發現了一個比較好玩的人工智能學習網站,通俗易懂,風趣幽默,可以了解了解AI基礎知識,人工智能教程,不是一堆數學公式和算法的那種,用各種舉例子來學習,讀起來比較輕松,有興趣可以看一下。
人工智能教程