.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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?