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

上一篇文章给大家分享了

.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注解

复制代码
public class UserDto
{
    [Required]
    public string Name { get; set; }

    [Range(1,120)]
    public int Age { get; set; }
}

Minimal API:

复制代码
app.MapPost("/users", (UserDto dto) =>
{
    return Results.Ok(dto);
});

如果请求:

{

"age": 200

}

系统会 自动返回 400

复制代码
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "One or more validation errors occurred.",
  "errors": {
    "Name": ["The Name field is required."],
    "Age": ["The field Age must be between 1 and 120."]
  }
}

这个自动校验的触发机制是这样的

ASP.NET Core 会在 Endpoint Binding 阶段执行:

  1. Request Body → Model Binding

  2. DataAnnotations Validation

  3. 如果失败 → 自动返回 400 ValidationProblem

  4. 如果成功 → 进入 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

示例代码

复制代码
app.MapGet("/time", () =>
{
    async IAsyncEnumerable<string> GetTimeStream()
    {
        while (true)
        {
            yield return DateTime.Now.ToString("HH:mm:ss");
            await Task.Delay(1000);
        }
    }

    return TypedResults.ServerSentEvents(GetTimeStream());
});

前端JS代码
const source = new EventSource("/time");

source.onmessage = (event) => {

console.log("Server time:", event.data);

};

同时,.NET 10 支持 Typed SSE Event

复制代码
app.MapGet("/events", () =>
{
    async IAsyncEnumerable<SseItem<string>> Stream()
    {
        while (true)
        {
            yield return new SseItem<string>(
                DateTime.Now.ToString(),
                eventType: "time"
            );

            await Task.Delay(1000);
        }
    }

    return TypedResults.ServerSentEvents(Stream());
});

三、OpenAPI 3.1支持

OpenAPI Specification 是 REST API 的行业标准规范。

OpenAPI 3.1 的核心变化:

MiniAPI代码示例

复制代码
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenApi();

var app = builder.Build();

app.MapGet("/stations", () =>
{
    return new[]
    {
        new { Id = 1, Name = "Station A" },
        new { Id = 2, Name = "Station B" }
    };
});

app.MapOpenApi();

app.Run();

访问:/openapi/v1.json

返回得到 OpenAPI 3.1 文档。

同时YAML也得到了支持

在 API 管理和云平台中,很多工具更喜欢 YAML 格式。

/openapi/v1.yaml

示例返回

复制代码
openapi: 3.1.0
info:
  title: Charging API
  version: 1.0.0
paths:
  /stations:
    get:
      responses:
        "200":
          description: OK

启用YAML输出

复制代码
builder.Services.AddOpenApi(options =>
{
    options.AddDocumentTransformer((doc, ctx, ct) =>
    {
        doc.Info.Title = "Charging Platform API";
        return Task.CompletedTask;
    });
});

这个对于AI Function Call非常有用

现在很多 AI Agent 使用 OpenAPI 作为 Tool Schema

.NET 10 的 OpenAPI 3.1 + YAML 支持,使 ASP.NET Core API 在标准化、AI集成、API网关和DevOps场景下更加现代化。

以上分享给大家。

周国庆

20260316