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

在以前的版本中,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;
    });
});
相关推荐
Lost of 程序猿11 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
ChaITSimpleLove15 小时前
.NET 10 的 AI 技术栈全景:M.E.AI、MCP 与 Agent Framework 深度解析
人工智能·.net·ai agent·mcp·agent framework·m.e.ai·hosted agents
格林威18 小时前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
J总裁的小芒果19 小时前
参数过多-分批传参
c#
典典分享指南19 小时前
短视频分镜提示词:让 AI 出片的产品口播
java·c#·bash·composer·symfony
Z59981784121 小时前
c#软件开发学习笔记--WPF(Canvas、数据绑定、MVVM模式、值转换器)
笔记·学习·c#
数据知道1 天前
.NET 反序列化漏洞——ViewState 与 BinaryFormatter 实战深度剖析
网络·网络安全·.net
淡海水1 天前
05-03-栈队列-PriorityQueue-TElement-TPriority-NET6优先队列语义与四叉堆实现
服务器·前端·c#·priorityqueue·clr·telement
Lost of 程序猿1 天前
ASP.NET Core 多租户架构深度实战:一套系统,管理一支船队
后端·架构·asp.net