源代码探案系列之 .NET Core 跨域中间件 CORS 本文探讨了ASP.NET Core中的CORS中间件,介绍了其核心流程和部件,包括CorsPolicy、CorsService和CorsMiddleware。讨论了跨域请求的处理流程,如预检请求和非预检请求的处理方式,以及如何应用CORS规范中的Access-Control系列头部字段。文章从源代码和规范两个角度深入探讨跨域问题的背景、发展以及CORS的原理和应用,涵盖了简单请求和复杂请求的区别。文章通过对CORS中间件和CORS规范的讨论,帮助读者全面理解跨域问题。
源代码探案系列之 .NET Core 限流中间件 AspNetCoreRateLimit 在今天这篇文章中,探讨了在分布式环境中限流中间件的重要性,引入了 AspNetCoreRateLimit 中间件,采用计数器算法实现限流功能,结合 IMemoryCache 和 IDistributedCache 实现基于内存和分布式缓存的持久化逻辑。详细介绍了 RateLimitProcessor 的实现,包括 ClientRateLimitProcessor 和 IpRateLimitProcessor,以及其依赖的IRateLimitStore 接口。另外,分析了 AsyncKeyLock 的实现,使用 SpinLock 实现了异步读写锁,提高了性能。最后,通过 RateLimitMiddleware 调用链路展示了中间件的整体执行过程。
源代码探案系列之 .NET Core 并发限制中间件 ConcurrencyLimiter 本文是 “源代码探案系列” 的开篇,旨在通过深入分析源代码来构建结构化的知识体系。文章首先指出了程序员在从 “生手” 到 “熟练工” 转变后,仍需掌握原理性知识的重要性。接着,作者以ASP.NET Core 中的 ConcurrencyLimiter 中间件为例,探讨了并发控制的实现原理。文中详细解释了 IQueuePolicy 接口及其两种策略实现:QueuePolicy 和 StackPolicy,并通过代码示例阐释了它们的工作机制。文章还介绍了如何使用 ConcurrencyLimiterMiddleware 中间件来控制请求并发,并提供了具体的使用示例。最后,作者总结了学习并发控制中间件的重要性,并鼓励读者深入学习相关技术。
一道 HashSet 面试题引发的蝴蝶效应 在这篇文章中,作者通过解读 HashSet 的源代码,介绍了 HashSet 去重的原理以及与 IEqualityComparer<T> 接口的关系。进一步讨论了在排序和去重操作中的接口应用,包括 IEquatable<T>、IComparable/IComparable<T> 和 IComparer<T> 接口的作用。通过对 HashSet、Dictionary 和去重操作的探讨,展示了这些数据结构和接口之间的联系,强调了在处理排序和去重时的重要性。整体上,文章通过解答一个关于 HashSet 的面试问题,深入探讨了涉及数据结构和接口的相关知识点,展示了技术知识体系中的连锁效应。
Dapper.Contrib 在 Oracle 环境下引发 ORA-00928 异常问题的解决 本文讨论了在使用 Dapper.Contrib 操作 Oracle 数据库时遇到的 ORA-XXXXX 错误,根本原因在于 Dapper.Contrib 未实现 OracleSqlAdapter,这与对自增 ID 的支持导致的 SQL 标准差异有关。文章指出不同数据库对自增 ID 实现方式不同,Oracle 需要序列,增加了维护工作量,且 Dapper.Contrib 底层设计不合理,缺乏扩展接口,违反开闭原则。作者提出了解决方法,包括自定义OracleSqlAdapter和扩展方法,以适配Oracle环境下的Dapper.Contrib使用。