分类: 教程

从 0 到 1:用 C# 手写一个完整的 Telnet 协议客户端

本文从 SwitchData 项目源码出发,手把手拆解一个生产可用的 C# Telnet 客户端。核心亮点:Telnet 协议状态机解析器(逐字节处理 IAC/DO/WILL/SB/SE 协商)、SemaphoreSlim 双锁全双工设计、复用 Encoder 解决 UTF-8 多字节截断、IAsyncDisposable 异步资源管理。附带实战踩坑:登录残留清除、VT100 控制序列过滤、ORDP 网关并发限流。

ASP.NET Core 接口审计日志实战:IAsyncActionFilter 拦截出入参 + 敏感字段脱敏 + 异步落库

接口审计日志选中间件还是 ActionFilter?中间件拿不到绑定后的参数和返回值,IAsyncActionFilter 正好卡在两者之间。本文基于真实项目代码,拆解 DisplayAttribute 生成双语操作名、入参敏感字段脱敏、出参反射递归截断、fire-and-forget 异步落库四大实现要点,并总结未观察异常、白名单跳过等踩坑细节。

C# 枚举元数据缓存实战:泛型静态类 + .NET 8 FrozenDictionary 让反射只跑一次

枚举转中文描述是业务系统刚需,但每次 ToString 加反射读 DescriptionAttribute 会拖慢高频接口。本文基于 SwitchData 项目的 EnumExtensions 实现,拆解泛型静态类 EnumCache<T> 的独立静态字段缓存原理、.NET 8 FrozenDictionary 的读优化特性,以及 (MyEnum)999 未定义枚举值的防御式处理,让枚举反射只跑一次。

C# Telnet ORDP 直连客户端实战:多设备并发 + 协议清洗 + 回退机制

在电信行业网络运维中,Telnet 协议直连网元是一个非常实用但容易被忽视的技术方案。本文从 SwitchData 项目出发,完整拆解一套生产级 ORDP 直连架构:SemaphoreSlim 并发限流保护网关单点、VT100+NUL+命令回显三重协议清洗、IAsyncDisposable 异步资源管理、Try-Catch 整体回退第三方平台。附带 TelnetClient.ClearPendingText、ExpectedCommandPromptCount 多阶段提示符等多个实战踩坑经验。

DataTable 扩展方法实战:从零构建 ADO.NET 数据后处理工具集(Trim/Schema/映射/落库零分配完整实现)

DataTable 用得多了就会发现,所有项目都在重复这些操作:去空行、Trim 字符串、列名/索引互查、Schema 克隆、DataRow 转 Dictionary、ToSortedTable、FirtRowToColumnName。本文基于 SwitchData 项目中真实在用的 DataTableExtensions(1700+ 行),把高频数据后处理操作整理成统一的扩展方法工具集,涵盖倒序遍历、Span 零分配清洗、CloneSchema/CopyData 投影、SplitColumn/MergeColumns/FillDownColumns 复杂业务转换等完整实现。

从零实现 C# Telnet 协议客户端:IAC 协商 + 子协商 + 终端类型握手完整实战

本文从真实项目代码出发,带你从零实现一个完整的 C# Telnet 协议客户端。我们会拆开 Telnet 协议的每一个字节——IAC 转义、DO/DONT/WILL/WONT 协商、SB/SE 子协商、终端类型(VT100)握手、窗口大小声明——然后用一个有限状态机把它们串起来,最后用 SemaphoreSlim 保证异步读写的线程安全。完整代码来自生产环境,已稳定跑了一年多。

Swagger 多态文档实战:JsonPolymorphic + Swashbuckle oneOf 让接口继承体系一目了然

Web API 有基类+多子类的继承体系(如 ReviewBase 派生 Excel/TXT/Database 三种导入请求),Swagger 默认只展示基类导致前端看不到子类字段。本文介绍用 System.Text.Json 的 JsonPolymorphic + JsonDerivedType 特性让运行时支持多态,再配合 Swashbuckle 的 UseOneOfForPolymorphism 自动生成 OpenAPI oneOf Schema,以及手动 DocumentFilter 和自定义 OperationFilter 两种备用方案,让 Swagger UI 直接展示子类下拉选择。

C# LINQ 表达式树深度解析:手写 ORM 如何把 Where/OrderBy 翻译成数据库查询条件

EF Core 是怎么把 LINQ 翻译成 SQL 的?答案是表达式树。本文从 SwitchData 项目中 462 行的 ExpressionParser 真实代码出发,展示手写 ORM 如何把 Where/OrderBy Lambda 翻译成结构化 QueryCondition 列表:排序解析沿方法调用链向内剥离,条件解析基于 ExpressionVisitor 深度优先遍历并还原括号语义,还包含闭包变量提取、string.Contains 转 LIKE、PredicateBuilder 动态组合等核心难点的完整实现。