更新丨.NET 7 预览版2 中的 ASP.NET Core
(本文阅读时间:6分钟)
.NET 7 预览版2
https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-2?ocid=AID3042760 完整 ASP.NET Core 路线图
https://aka.ms/aspnet/roadmap?ocid=AID3042760
开始使用
要开始使用 .NET 7 Preview 2 中的 ASP.NET Core,请安装 .NET 7 SDK。
.NET 7 SDK:
https://dotnet.microsoft.com/download/dotnet/7.0?ocid=AID3042760
Visual Studio 2022 预览版:
https://visualstudio.com/preview?ocid=AID3042760
升级现有项目
要将现有的 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.*。
-
重大更改 完整列表
https://docs.microsoft.com/dotnet/core/compatibility/7.0#aspnet-core?ocid=AID3042760
推断来自服务的 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();
}
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;
}
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]}")
// 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
https://github.com/daviddesmet
请求有关 IIS 卷影复制的反馈
在 .NET 6 中,我们为 IIS 的 ASP.NET Core 模块 (ANCM) 添加了对影子复制应用程序程序集的实验性支持。当 ASP.NET Core 应用程序在 Windows 上运行时,二进制文件被锁定,因此无法修改或替换它们。您可以通过部署应用程序离线文件来停止应用程序,但有时这样做不方便或不可能。卷影复制允许在应用程序运行时通过复制程序集来更新应用程序程序集。
<?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>
应用程序离线文件
https://docs.microsoft.com/aspnet/core/host-and-deploy/app-offline?ocid=AID3042760
-
分享反馈
https://github.com/dotnet/AspNetCore.Docs/issues/23733
总结
我们希望您喜欢 .NET 7 中的 ASP.NET Core 预览版。通过在 GitHub 上提交问题,让我们知道您对这些新改进的看法。
提交问题