找回密码
 立即注册
首页 业界区 业界 .NET 10 & C# 14 New Features 新增功能介绍-ASP.NET Co ...

.NET 10 & C# 14 New Features 新增功能介绍-ASP.NET Core

馏栩梓 昨天 09:25
上一篇文章给大家分享了
.NET 10 & C# 14 New Features 新增功能介绍-.NET CLI工具改进

本篇文章接续给大家分享ASP.NET Core的一些增强:
一、Minimal API 内置参数验证(Built-in validation for Minimal APIs)

在以前的版本中,Minimal API 默认不会自动执行 DataAnnotations 验证,通常需要:

  • 手动调用 Validator
  • 使用 FluentValidation
  • 或写 Middleware / Filter
 而在 .NET 10 中,Minimal API 可以自动执行模型验证,和 MVC Controller 的行为一致。
 使用 DataAnnotations注解
  1. public class UserDto
  2. {
  3.     [Required]
  4.     public string Name { get; set; }
  5.     [Range(1,120)]
  6.     public int Age { get; set; }
  7. }
复制代码
Minimal API:
  1. app.MapPost("/users", (UserDto dto) =>
  2. {
  3.     return Results.Ok(dto);
  4. });
复制代码
如果请求:
{
  "age": 200
}
系统会 自动返回 400
  1. {
  2.   "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  3.   "title": "One or more validation errors occurred.",
  4.   "errors": {
  5.     "Name": ["The Name field is required."],
  6.     "Age": ["The field Age must be between 1 and 120."]
  7.   }
  8. }
复制代码
这个自动校验的触发机制是这样的
ASP.NET Core 会在 Endpoint Binding 阶段执行:

  • Request Body → Model Binding
  • DataAnnotations Validation
  • 如果失败 → 自动返回 400 ValidationProblem
  • 如果成功 → 进入 Handler
 
二、新增了对 Server-Sent Events(SSE) 的原生支持
在 ASP.NET Core 的 .NET 10 中,新增了对 Server-Sent Events(SSE) 的原生支持,可以通过
TypedResults.ServerSentEvents 直接返回 实时数据流
这让 Minimal API 实现实时推送变得非常简单,无需使用 WebSocket 或 SignalR。
一行代码搞定
TypedResults.ServerSentEvents()
自动:

  • 设置 Content-Type
  • 处理数据流格式
  • 处理 Flush
 示例代码
  1. app.MapGet("/time", () =>
  2. {
  3.     async IAsyncEnumerable<string> GetTimeStream()
  4.     {
  5.         while (true)
  6.         {
  7.             yield return DateTime.Now.ToString("HH:mm:ss");
  8.             await Task.Delay(1000);
  9.         }
  10.     }
  11.     return TypedResults.ServerSentEvents(GetTimeStream());
  12. });
复制代码
前端JS代码
const source = new EventSource("/time");
source.onmessage = (event) => {
    console.log("Server time:", event.data);
};
同时,.NET 10 支持 Typed SSE Event
  1. app.MapGet("/events", () =>
  2. {
  3.     async IAsyncEnumerable<SseItem<string>> Stream()
  4.     {
  5.         while (true)
  6.         {
  7.             yield return new SseItem<string>(
  8.                 DateTime.Now.ToString(),
  9.                 eventType: "time"
  10.             );
  11.             await Task.Delay(1000);
  12.         }
  13.     }
  14.     return TypedResults.ServerSentEvents(Stream());
  15. });
复制代码
三、OpenAPI 3.1支持
OpenAPI Specification 是 REST API 的行业标准规范。
OpenAPI 3.1 的核心变化:
1.png

 MiniAPI代码示例
  1. var builder = WebApplication.CreateBuilder(args);
  2. builder.Services.AddOpenApi();
  3. var app = builder.Build();
  4. app.MapGet("/stations", () =>
  5. {
  6.     return new[]
  7.     {
  8.         new { Id = 1, Name = "Station A" },
  9.         new { Id = 2, Name = "Station B" }
  10.     };
  11. });
  12. app.MapOpenApi();
  13. app.Run();
复制代码
访问:/openapi/v1.json
返回得到 OpenAPI 3.1 文档。
同时YAML也得到了支持
在 API 管理和云平台中,很多工具更喜欢 YAML 格式。
/openapi/v1.yaml
示例返回
  1. openapi: 3.1.0
  2. info:
  3.   title: Charging API
  4.   version: 1.0.0
  5. paths:
  6.   /stations:
  7.     get:
  8.       responses:
  9.         "200":
  10.           description: OK
复制代码
启用YAML输出
  1. builder.Services.AddOpenApi(options =>
  2. {
  3.     options.AddDocumentTransformer((doc, ctx, ct) =>
  4.     {
  5.         doc.Info.Title = "Charging Platform API";
  6.         return Task.CompletedTask;
  7.     });
  8. });
复制代码
这个对于AI Function Call非常有用
现在很多 AI Agent 使用 OpenAPI 作为 Tool Schema
.NET 10 的 OpenAPI 3.1 + YAML 支持,使 ASP.NET Core API 在标准化、AI集成、API网关和DevOps场景下更加现代化。
 
以上分享给大家。
 
周国庆
20260316
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册