.NET 6 Preview 4 已发布,ASP.NET Core 更新内容( 二 )


文章插图
 
异步流ASP.NET Core 现在支持从控制器 Action 一直到响应的 JSON 格式化器的异步流 。从 Action 中返回 IAsyncEnumerable , 在发送之前不再在内存中缓冲响应内容 。这有助于在返回可异步枚举的大型数据集时减少内存使用 。
请注意 , Entity Framework Core 提供了用于查询数据库的 IAsyncEnumerable 的实现 。在 .NET 6 中 , ASP.NET Core 对 IAsyncEnumerable 的支持有所改进 , 可以使 EF Core 与 ASP.NET Core 的使用更加高效 。例如 , 下面的代码在发送响应前将不再把 Products 数据缓冲到内存中:
public IActionResult GetProducts(){return Ok(dbContext.Products);}然而 , 如果你已经将 EF Core 设置为使用懒加载 , 这种新的行为可能会导致在数据被枚举时由于并发的查询执行而产生错误 。你可以通过自己缓冲数据来恢复到以前的行为:
public async Task<IActionResult> Products(){return Ok(await dbContext.Products.ToListAsync());}有关这一行为变化的更多细节 , 见相关公告[4] 。
HTTP 日志中间件HttpLogging 是一个新的内置中间件 , 可以记录 HTTP 请求和 HTTP 响应的信息 , 包括头信息和整个 Body 。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseHttpLogging();}HttpLogging 中间件提供了以下日志:

  • HTTP 请求信息
  • 普通属性
  • 头信息
  • 请求 Body
  • HTTP 响应信息
为了配置 HTTP 日志中间件 , 你可以在对 ConfigureServices() 的调用中指定 HttpLoggingOptions:
public void ConfigureServices(IServiceCollection services){services.AddHttpLogging(logging =>{// Customize HTTP logging here.logging.LoggingFields = HttpLoggingFields.All;logging.RequestHeaders.Add("My-Request-Header");logging.ResponseHeaders.Add("My-Response-Header");logging.MediaTypeOptions.AddText("application/JAVAscript");logging.RequestBodyLogLimit = 4096;logging.ResponseBodyLogLimit = 4096;});}这会在日志中产生新的带有
Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware 类别的 HTTP 请求信息 。
关于如何使用 HTTP 日志的更多信息 , 请看 HTTP 日志文档[5] 。
使用 Kestrel 作为默认启动
.NET 6 Preview 4 已发布,ASP.NET Core 更新内容

文章插图
 
对于在 .NET 6 Preview 4 中创建的所有新项目 , 我们已将默认的启动配置文件从 IIS Express 改为 Kestrel 。在开发应用程序时 , 启动 Kestrel 的速度明显加快 , 并带来了更灵敏的体验 。
IIS Express (ms) Kestrel (ms) % change Debugging 4359 2772 36% No debugging 1999 727 64%
IIS Express 仍然可以作为启动项 , 用于 Windows 认证或端口共享等情况 。
IConnectionSocketFeatureIConnectionSocketFeature 功能使你能够访问与当前请求相关的底层接受 socket 。它可以通过 HttpContext 上的 FeatureCollection 访问 。
例如 , 下面的应用程序在接受 socket 上设置 LingerState 属性:
var builder = WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel(serverOptions =>{serverOptions.ConfigureEndpointDefaults(listenOptions => listenOptions.Use((connection, next) =>{var socketFeature = connection.Features.Get<IConnectionSocketFeature>();socketFeature.Socket.LingerState = new LingerOption(true, seconds: 10);return next();}));});var app = builder.Build();app.MapGet("/", (Func<string>)(() => "Hello world"));await app.RunAsync();改进单页应用(SPA)模板略...(译注:文字太长 , 懒得翻译了 , 主要 VS 中的 SPA 模板我从来不用)
.NET 热重载最新的 Visual Studio 预览版对.NET Hot 热重载有一些初步的支持 。你可能已经注意到在调试你的应用程序时 , 新的 Apply Code Changes 按钮和调试选项 。
.NET 6 Preview 4 已发布,ASP.NET Core 更新内容

文章插图
 
Apply Code Changes 按钮将用你所作的代码修改来更新正在运行的应用程序 , 甚至不需要保存 。下面是一个更新 Counter 组件的例子 , 它的增量从 1 改为 2 。请注意 , 一旦修改被应用 , 当前的计数不会丢失:
.NET 6 Preview 4 已发布,ASP.NET Core 更新内容


推荐阅读