.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=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 实现,如下例所示。

// 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 处理程序设置来启用卷影仿制:

<?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!