馏栩梓 发表于 7 天前

.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
{
   
    public string Name { get; set; }

   
    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 阶段执行:

[*]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
 示例代码
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
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: .NET 10 & C# 14 New Features 新增功能介绍-ASP.NET Core