.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] 属性显式利用于参数。

Services.AddScoped<SomeCustomType>();[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<ApiBehaviorOptions>(options =>{     options.DisableImplicitFromServicesParameters = true;})

您能够通过设置DisableImplicitFromServicesParameters 来禁用该性能:

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

SignalR 集线器办法的依赖注入

SignalR 集线器办法当初反对通过依赖注入(DI) 注入服务。

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

您能够通过设置DisableImplicitFromServicesParameters 来禁用该性能:

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

要显式标记要从配置的服务绑定的参数,请应用[FromServices] 属性:

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

为Minimal API 提供端点形容和摘要

Minimal API 当初反对应用用于OpenAPI 标准生成的形容和摘要来正文操作。 您能够应用扩大办法在Minimal API 应用程序中为路由处理程序设置这些形容和摘要:

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:

// Bind query string values to a primitive type array// GET  /tags?q=1&q=2&q=3app.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=janeapp.MapGet("/tags", (string[] names) => $"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}")// Bind to StringValues// GET /tags?names=john&names=jack&names=janeapp.MapGet("/tags", (StringValues names) => $"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}")

您还能够将查问字符串或标头值绑定到简单类型的数组,只有该类型具备TryParse 实现,如下例所示。

// Bind query string values to a primitive type array// GET  /tags?q=1&q=2&q=3app.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=janeapp.MapGet("/tags", (string[] names) => $"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}")// Bind to StringValues// GET /tags?names=john&names=jack&names=janeapp.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 处理程序设置来启用卷影复制:

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.webServer>    <handlers>      <remove name="aspNetCore"/>      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified"/>    </handlers>    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout">      <handlerSettings>        <handlerSetting name="experimentalEnableShadowCopy" value="true" />        <handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" />      </handlerSettings>    </aspNetCore>  </system.webServer></configuration>

咱们正在钻研使IIS 中的卷影复制成为.NET 7 中ASP.NET Core 的一项性能,并且咱们正在寻求无关该性能是否满足用户要求的更多反馈。 如果您将ASP.NET Core 部署到IIS,请尝试应用卷影复制并在GitHub 上与咱们分享您的反馈。

给予反馈

咱们心愿您喜爱.NET 7 中的ASP.NET Core 预览版。通过在GitHub上提交问题,让咱们晓得您对这些新改良的认识。

感谢您试用ASP.NET Core!