.NET 7 預覽版2 中的 ASP.NET Core 更新

語言: CN / TW / HK

.NET 7 預覽版2 現已推出,其中包括對ASP.NET Core 的許多重大改進。

以下是此預覽版中新增內容的摘要:

  • 推斷來自服務的API 控制器操作參數
  • SignalR 集線器方法的依賴注入
  • 為minimal API 提供端點描述和摘要
  • 在最小的API 中綁定來自標頭和查詢字符串的數組和StringValue
  • 自定義cookie 同意值

有關為.NET 7 計劃的ASP.NET Core 工作的更多詳細信息,請參閲GitHub 上的.NET 7 的完整ASP.NET Core 路線圖。

開始使用

要開始使用.NET 7 Preview 2 中的ASP.NET Core,請安裝.NET 7 SDK

如果您在Windows 上使用Visual Studio,我們建議安裝最新的Visual Studio 2022 預覽版。Visual Studio for Mac 對.NET 7 預覽的支持尚不可用,但即將推出。

要安裝最新的.NET WebAssembly 構建工具,請從提升的命令提示符處運行以下命令:

dotnet workload install wasm-tools

升級現有項目

要將現有的ASP.NET Core 應用從.NET 7 Preview 1 升級到.NET 7 Preview 2:

  • 將所有Microsoft.AspNetCore. 包引用更新到7.0.0-preview.2.
  • 將所有Microsoft.Extensions. 包引用更新到7.0.0-preview.2.

另請參閲.NET 7 的ASP.NET Core 中的重大更改的完整列表。

推斷來自服務的API 控制器操作參數

當類型配置為服務時,API 控制器操作的參數綁定現在通過依賴注入綁定參數。 這意味着不再需要將[FromServices] 屬性顯式應用於參數。

```csharp Services.AddScoped();

[Route("[controller]")] [ApiController] public class MyController : ControllerBase { // Both actions will bound the SomeCustomType from the DI container public ActionResult GetWithAttribute([FromServices]SomeCustomType service) => Ok(); public ActionResult Get(SomeCustomType service) => Ok(); }

您可以通過設置 DisableImplicitFromServicesParameters 來禁用該功能:

Services.Configure(options => { options.DisableImplicitFromServicesParameters = true; }) ```

您可以通過設置DisableImplicitFromServicesParameters 來禁用該功能:

csharp Services.Configure<ApiBehaviorOptions>(options => { options.DisableImplicitFromServicesParameters = true; })

SignalR 集線器方法的依賴注入

SignalR 集線器方法現在支持通過依賴注入(DI) 注入服務。

```csharp Services.AddScoped();

public class MyHub : Hub { // SomeCustomType comes from DI by default now public Task Method(string text, SomeCustomType type) => Task.CompletedTask; } ```

您可以通過設置DisableImplicitFromServicesParameters 來禁用該功能:

csharp services.AddSignalR(options => { options.DisableImplicitFromServicesParameters = true; });

要顯式標記要從配置的服務綁定的參數,請使用[FromServices] 屬性:

csharp public class MyHub : Hub { public Task Method(string arguments, [FromServices] SomeCustomType type); }

為Minimal API 提供端點描述和摘要

Minimal API 現在支持使用用於OpenAPI 規範生成的描述和摘要來註釋操作。 您可以使用擴展方法在Minimal API 應用程序中為路由處理程序設置這些描述和摘要:

csharp app.MapGet("/hello", () => ...) .WithDescription("Sends a request to the backend HelloService to process a greeting request.");

或者通過路由處理程序委託上的屬性設置描述或摘要:

app.MapGet("/hello", [EndpointSummary("Sends a Hello request to the backend")]() => ...)

在Minimal API 中綁定來自標頭和查詢字符串的數組和StringValue

在此版本中,您現在可以將HTTPS 標頭和查詢字符串中的值綁定到原始類型數組、字符串數組或StringValues:

```csharp // Bind query string values to a primitive type array // GET /tags?q=1&q=2&q=3 app.MapGet("/tags", (int[] q) => $"tag1: {q[0]} , tag2: {q[1]}, tag3: {q[2]}")

// Bind to a string array // GET /tags?names=john&names=jack&names=jane app.MapGet("/tags", (string[] names) => $"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}")

// Bind to StringValues // GET /tags?names=john&names=jack&names=jane app.MapGet("/tags", (StringValues names) => $"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}") ```

您還可以將查詢字符串或標頭值綁定到複雜類型的數組,只要該類型具有TryParse 實現,如下例所示。

```csharp // Bind query string values to a primitive type array // GET /tags?q=1&q=2&q=3 app.MapGet("/tags", (int[] q) => $"tag1: {q[0]} , tag2: {q[1]}, tag3: {q[2]}")

// Bind to a string array // GET /tags?names=john&names=jack&names=jane app.MapGet("/tags", (string[] names) => $"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}")

// Bind to StringValues // GET /tags?names=john&names=jack&names=jane app.MapGet("/tags", (StringValues names) => $"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}") ```

自定義cookie 同意值

您現在可以使用新的CookiePolicyOptions.ConsentCookieValue 屬性指定用於跟蹤用户是否同意cookie 使用策略的值。

感謝@daviddesmet貢獻了這項改進!

請求有關IIS 卷影複製的反饋

在.NET 6 中,我們為IIS 的ASP.NET Core 模塊(ANCM) 添加了對影子複製應用程序程序集的實驗性支持。 當ASP.NET Core 應用程序在Windows 上運行時,二進制文件被鎖定,因此無法修改或替換它們。 您可以通過部署應用程序離線文件來停止應用程序,但有時這樣做不方便或不可能。 卷影複製允許在應用程序運行時通過複製程序集來更新應用程序程序集。

您可以通過在web.config 中自定義ANCM 處理程序設置來啟用卷影複製:

```

```

我們正在研究使IIS 中的卷影複製成為.NET 7 中ASP.NET Core 的一項功能,並且我們正在尋求有關該功能是否滿足用户要求的更多反饋。 如果您將ASP.NET Core 部署到IIS,請嘗試使用卷影複製並在GitHub 上與我們分享您的反饋

給予反饋

我們希望您喜歡.NET 7 中的ASP.NET Core 預覽版。通過在GitHub上提交問題,讓我們知道您對這些新改進的看法。

感謝您試用ASP.NET Core!