.NET 8下的AOT
相比之前,AOT在.NET8的第5个预览版有了进一步的实现,给我的感觉是在一步步落地,虽然离生产还很远,但还是能看到希望的。
使用AOT的API项目与传统的Web API项目在模版就作了区分,分别是“asp.net core api”和“asp.net core web api”,命令行创建项目的短名称是api和webapi,api是一个更小,更基础的api模版,是通过WebApplication.CreateSlimBuilder来创建的,包含以下功能:
- appsettings.json 和 appsettings.{EnvironmentName}.json 的 JSON 文件配置
- 用户机密配置
- 控制台日志记录
- 日志记录配置
由于AOT不支持反射,所以在代码中有反射的使用或使用三方库有反射时都无法使用AOT方式。那么在API中怎么把一个对象或集合返回给API或从API中接到JSON后怎么转成对象和集合呢?在.NET8的API项目中,使用的方式是源生成器,位于System.Text.Json中,下面看API模版代码理解吧。
using System.Text.Json.Serialization; using Demo03; var builder = WebApplication.CreateSlimBuilder(args); builder.Services.ConfigureHttpJsonOptions(options => { options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default); }); var app = builder.Build(); var sampleTodos = TodoGenerator.GenerateTodos().ToArray(); var todosApi = app.MapGroup("/todos"); todosApi.MapGet("/", () => sampleTodos); todosApi.MapGet("/{id}", (int id) => sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo ? Results.Ok(todo) : Results.NotFound()); app.Run(); [JsonSerializable(typeof(Todo[]))] internal partial class AppJsonSerializerContext : JsonSerializerContext { }
通过给一个类AppJsonSerializerContext来添加特性[JsonSerializable(typeof(Todo[]))],来替换掉在对象和JSON之间的转换。
同时,AOT类型的项目也不能基于IIS来调试,所以对launchSettings.json作了调整。
下面是官方给出的功能支持力度,相当一部分功能已实现。但一些三方的功能也是需要时间对应的,好饭不怕晚,让我们静候AOT的到来吧。
| 功能 | 完全支持 | 部分支持 | 不支持 |
|---|---|---|---|
| gRPC | ✔️完全支持 | ||
| 最小 API | ✔️部分支持 | ||
| MVC | ❌❌ | ||
| Blazor Server | ❌❌ | ||
| SignalR | ❌❌ | ||
| Authentication | ❌(即将推出 JWT) | ||
| CORS | ✔️完全支持 | ||
| HealthChecks | ✔️完全支持 | ||
| HttpLogging | ✔️完全支持 | ||
| 本地化 | ✔️完全支持 | ||
| OutputCaching | ✔️完全支持 | ||
| RateLimiting | ✔️完全支持 | ||
| RequestDecompression | ✔️完全支持 | ||
| ResponseCaching | ✔️完全支持 | ||
| ResponseCompression | ✔️完全支持 | ||
| Rewrite | ✔️完全支持 | ||
| Session | ❌❌ | ||
| Spa | ❌❌ | ||
| StaticFiles | ✔️完全支持 | ||
| WebSockets | ✔️完全支持 |
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号

****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524

浙公网安备 33010602011771号