Dotnet

.NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理

为什么 API 版本管理如此重要? API 版本管理的核心目标是:在不破坏现有用户的前提下,持续迭代和改进 API。通过版本管理,我们可以: 引入新功能:在新版本中添加字段、接口等,而不影响旧版本的用户。 修复 bug:在新版本中修复问题,而不冒破坏旧版本的风险。 逐步淘汰:在新版本中移除过时的功能,给用户足够的时间迁移。 常见的版本策略有这几种: URL 路径版本:/api/v1/users,直 …

.NET 中 .Result 避坑指南:不同框架下的死锁与线程池饥饿

这篇只讲一个知识点:在 .NET 代码里用 .Result(或 GetAwaiter().GetResult())同步阻塞异步任务,为什么在不同框架下会触发不同类型的事故。 问题背景 同样一行代码,在两个系统里出现了完全不同的故障: 老系统(ASP.NET MVC 5)请求直接卡死,不返回 新系统(ASP.NET Core)不是直接死锁,而是高峰期吞吐突然掉到很低,请求排队超时 两边都有这段写法: …

.NET 内存性能优化实战:Span<T>、ArrayPool、GC 与 LOH 控制

很多服务在压测里吞吐不错,一上生产就抖。根因常常不是业务逻辑,而是内存分配模式不健康。 典型表现: GC 频率偏高 P99 周期性尖峰 单机吞吐不稳定 这篇文章重点讲“如何减少无意义分配”,并把优化控制在团队可维护范围内。 问题背景 真实现场:一次常规版本上线后,接口平均耗时变化不大,但 P99 从 120ms 拉到 380ms,最后定位到的是字符串拼接和临时数组在高峰时段触发了更频繁的 GC。 …

Microsoft Agent Framework + Kimi API 实战:控制台应用跑通单次与多轮 Agent 对话

引言 如果你的技术栈主要是 .NET,想要快速上手 Agent 开发,那么 Microsoft Agent Framework 是一个非常不错的选择。它提供了对话管理、上下文保持、工具调用等一系列功能,让你能专注于业务逻辑实现。 这篇文章用一个最小控制台应用,通过 maf + kimi ai 合作,完成下面的目标: 使用 Microsoft Agent Framework(NuGet …

Serilog + OpenTelemetry:从请求日志到链路追踪的关联落地

这篇直接给落地方案,不再讲结构化日志的背景概念。目标只有一个:在 ASP.NET Core 服务里,把 Serilog 日志和 OpenTelemetry 链路追踪打通,排障时可以从一条错误日志直接跳到完整 Trace。 1. 问题背景:这篇要交付什么 按下面步骤做完,你会得到一条可执行排障链路: 日志里稳定带上 TraceId、SpanId、RequestPath、RequestMethod 业 …

Serilog:从结构化日志认知到 .NET 工程落地

问题背景 很多项目不缺日志,缺的是有用的日志。 平时接口跑得顺,大家都觉得日志够用。真到线上出问题,日志的短板会一下子暴露出来。 比如订单接口偶发超时,日志里只剩这么一句: Create order failed for customer 1024, cost 3800ms, trace abc123 这种日志平时看着还行,真到线上排障时基本帮不上太多忙: …