news 2026/4/24 17:00:41

.NET 10 New feature 新增功能介绍-Minimal APIs增强

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
.NET 10 New feature 新增功能介绍-Minimal APIs增强

上一篇给大家分享了

.NET 10 New feature 新增功能介绍-WebSocket功能增强

今天给大家继续分享.NET 10 中Minimal APIs 的增强。

一、复杂参数对象中空字符串按null处理

在使用复杂对象参数的 Minimal APIs 时,表单提交中的空字符串值现在将被转换为/* by 01130.hk - online tools website : 01130.hk/zh/pngcompression.html */ [FromForm],而不是解析失败。

usingMicrosoft.AspNetCore.Http;varbuilder =WebApplication.CreateBuilder(args);varapp =builder.Build(); app.MapPost("/todo", ([FromForm] Todo todo) =>TypedResults.Ok(todo)); app.Run();publicclassTodo {publicintId {get;set; }publicDateOnly? DueDate {get;set; }//Empty strings map to `null`publicstringTitle {get;set; }publicboolIsCompleted {get;set; } }

二、参数验证

此功能允许请求验证发送到 API 终结点的数据。 启用验证允许 ASP.NET Core 运行时对以下项执行定义的任何验证:

  • Query
  • Header
  • 请求主体

使用命名空间中的 DataAnnotations 属性定义验证。 开发人员通过以下方式自定义验证系统的行为:

  • 创建自定义 [Validation] 属性实现。
  • 实现复杂验证逻辑的 IValidatableObject 接口。

如果验证失败,运行时将返回 400 错误的请求响应,其中包含验证错误的详细信息。

三、启用内置验证支持

调用/* by 01130.hk - online tools website : 01130.hk/zh/pngcompression.html */ AddValidation扩展方法在应用程序的服务容器中注册所需的服务,为最小 API 启用内置验证支持:

builder.Services.AddValidation();

自动发现在最小 API 处理程序中定义的类型,或作为在最小 API 处理程序中定义的类型的基类型。 终结点筛选器对这些类型执行验证,并为每个终结点添加。

可以使用扩展方法为特定终结点DisableValidation禁用验证,如以下示例所示:

app.MapPost("/products", ([EvenNumber(ErrorMessage="Product ID must be even")]intproductId, [Required]stringname)=>TypedResults.Ok(productId)) .DisableValidation();

四、使用 C# 记录类型进行验证

支持使用 C# 记录类型进行验证。 可以使用命名空间中的 System.ComponentModel.DataAnnotations 属性(类似于类)验证记录类型。 例如:

public record Product( [Required] string Name, [Range(1, 1000)] int Quantity);

在最小 API 终结点中将记录类型用作参数时,验证属性将自动应用与类类型相同的方式:

app.MapPost("/products", (Product product) => { // Endpoint logic here return TypedResults.Ok(product); });

同时,验证 API 已移动到Microsoft.Extensions.Validation命名空间和 NuGet 包。

这让这个 API 在 ASP.NET 核心 HTTP 方案之外仍然可以复用、使用。

公共 API 和行为保持不变,只有包和命名空间不同。 现有项目不需要更改代码,因为旧引用会重定向到新实现。

五、支持服务器端事件 (SSE)

此项功能对大模型服务调用非常友好,方便快速集成大模块SSE请求调用

ASP.NET Core 现在支持使用 TypedResults.ServerSentEvents API 返回 ServerSentEvents 结果。 最小 API 和基于控制器的应用都支持此功能。

Server-Sent 事件是一种服务器推送技术,允许服务器通过单个 HTTP 连接将事件消息流发送到客户端。

在 .NET 中,事件消息表示为SseItem<T>对象,这些对象可能包含事件类型、ID 和数据有效负载。T

TypedResults 类具有一个名为 ServerSentEvents 的新静态方法,可用于返回ServerSentEvents结果。

此方法的第一个参数是IAsyncEnumerable<SseItem<T>>,它表示要发送到客户端的事件消息流。

以下示例演示如何使用TypedResults.ServerSentEventsAPI 将心率事件流作为 JSON 对象返回到客户端:

app.MapGet("/json-item", (CancellationToken cancellationToken) =>{asyncIAsyncEnumerable<HeartRateRecord>GetHeartRate( [EnumeratorCancellation] CancellationToken cancellationToken) {while(!cancellationToken.IsCancellationRequested) {varheartRate = Random.Shared.Next(60,100);yieldreturnHeartRateRecord.Create(heartRate);awaitTask.Delay(2000, cancellationToken); } }returnTypedResults.ServerSentEvents(GetHeartRate(cancellationToken), eventType:"heartRate"); });

以上是.NET 10 中Minimal APIs 的增强功能的介绍。

周国庆

2026/1/11

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 20:20:13

用 ADT 的 MIA Select Converter 快速迁移 Open SQL:把老式 SELECT 一键升级到 ABAP SQL 与 ABAP Cloud 语法

在把经典 ABAP 代码搬到 ABAP Cloud 或者做 S/4HANA 现代化改造时,最让人头疼的往往不是语法本身,而是那一大片历史遗留的 SELECT ...:有的写法还停留在早期 Open SQL 习惯,有的直接依赖传统透明表,有的混着旧式字段列表与过时的 INTO 结构。你当然可以手工逐条改,但在真…

作者头像 李华
网站建设 2026/4/22 15:06:28

从传统 ABAP 开发转型到 ABAP Cloud 开发,具体要学哪些东西?

很多团队在讨论 ABAP Cloud 时,常见的卡点并不是 RAP 或 CDS 本身有多难,而是学习目标太大、路径太长、角色太杂:有人要写业务逻辑,有人要做报表分析,有人要管架构与扩展治理,有人要做 Fiori 前端,还有人要把质量与安全的闸门立起来。把所有内容塞进一条 Roadmap,看上去…

作者头像 李华
网站建设 2026/4/21 22:17:06

AutoGLM-Phone-9B实战:移动端多语言翻译系统开发

AutoGLM-Phone-9B实战&#xff1a;移动端多语言翻译系统开发 随着移动设备在日常生活中的广泛应用&#xff0c;用户对实时、高效、跨语言沟通的需求日益增长。传统云端翻译服务虽然性能强大&#xff0c;但存在延迟高、隐私泄露风险和依赖网络等问题。为解决这一挑战&#xff0…

作者头像 李华
网站建设 2026/4/22 14:56:15

AutoGLM-Phone-9B零售终端:智能收银系统

AutoGLM-Phone-9B零售终端&#xff1a;智能收银系统 随着人工智能技术在消费场景中的深度渗透&#xff0c;传统零售终端正加速向智能化、自动化方向演进。其中&#xff0c;AutoGLM-Phone-9B 作为一款专为移动端优化的多模态大语言模型&#xff0c;凭借其轻量化设计与跨模态融合…

作者头像 李华
网站建设 2026/4/23 13:26:54

Keil环境下STM32时钟系统配置深度剖析

STM32时钟系统配置实战&#xff1a;从Keil工程到寄存器级掌控你有没有遇到过这样的情况&#xff1f;程序下载进去后&#xff0c;单片机不跑&#xff1b;或者串口输出乱码、定时器延时不准——查了一圈外设代码都没问题&#xff0c;最后发现是时钟没配对。在STM32开发中&#xf…

作者头像 李华
网站建设 2026/4/21 13:04:18

5分钟搭建CONFIG签名验证原型系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个极简的配置签名验证原型系统&#xff0c;要求&#xff1a;1. 支持上传配置文件 2. 自动检测签名有效性 3. 高亮显示错误位置 4. 一键生成新签名 5. 导出修复后的文件。使用…

作者头像 李华