从 .NET Core 2.2 升级到 3.1 的踩坑之旅 在软件开发中,版本更新频繁可能导致API变动频繁,如.NET Core从1.x到3.x的快速更新。文章主要介绍了将项目从.NET Core 2.2升级到3.1的过程中遇到的问题和解决方法,涵盖了更新项目文件、程序入口、Startup配置、序列化以及一些常见问题的解决方案。需要注意的是.NET Core 3.0开始使用System.Text.Json替代Newtonsoft.json作为新一代JSON API,同时解决了SignalR项目中的大小写问题。还提到了更新Swashbuckle.AspNetCore版本以及调整Swagger中间件配置来解决类型加载问题,以及解决编译时找不到Microsoft.NET.Sdk.Web的方法。
Referrer 还是 Referer? 一个迷人的错误 本文讲述了作者因拼写错误而怀疑人生的经历,探讨了"Referer"和"Referrer"两个单词的历史来源和区别。文章回顾了HTTP协议中的"Referer"拼写错误的起源,以及后续在HTTP/1.1中的修正说明,介绍了"Referrer-Policy"头部的含义和用途。作者分享了对这个错误拼写的疑惑和困惑,强调在后端应用使用"Referer",在前端应用使用"Referrer",并谈及了这种历史错误可能持续存在的可能性。文章以作者的经历为线索,探讨了这一历史错误的迷人之处。
使用 Python 开发插件化应用程序 本文主要讨论了插件化应用的概念及其在 Python 开发中的应用。插件化使主程序能够通过扩展模块来增加新的功能,不需要对主体程序进行修改。作者通过一个示例,演示了如何使用 Python 的 importlib 模块实现插件的动态导入和运行时的 “热插拔”,并且通过 watchdog 模块实现了配置文件的实时监控和模块的自动重新加载。文章通过一个壁纸下载程序的具体实现,详细说明了如何为程序添加插件功能,并引入了 “约定大于配置” 的理念。作者还通过 GitHub 提供了更多的代码细节,便于读者进一步学习和理解。
Vue 快速实现通用表单验证 本文讨论了在开发过程中遇到的前后端分离、表单验证等问题。作者通过三个示例分享了在 Vue 下实现表单验证的方法,包括最简单的表单验证、基于 jQuery 的表单验证和基于 Vue 的表单验证。针对 Vue 的表单验证,作者介绍了使用 VeeValidate 插件的方法,并展示了扩展自定义验证规则的步骤。文中强调了表单验证的重要性以及在实际工作中遇到的挑战和心得体会。
通过 ApiExplorer 为 Swagger 提供 MVC 扩展 文章讲述了作者因为 Jekins 项目模板不支持多项目解决方案而妥协使用混合技术栈的单一项目,并在项目中引入 Swagger 生成 API 文档。作者介绍了 Swagger 生成文档的核心依赖 IApiExplorer 接口,并针对 ASP.NET MVC 项目缺乏对 Swagger 的支持,创建了一个自定义的 MvcApiExplorer 类来扩展 Swagger 的功能。通过反射和自定义实现,使得 Swagger 能够识别 MVC 项目中的控制器和动作,并生成相应的 API 文档。作者还提供了相关的代码示例,并在 GitHub 上发布了扩展的代码和示例项目,方便读者学习和使用。
.NET Core POCOController 在动态 Web API 中的应用 本文介绍了在 .NET Core 中使用 POCOController 的应用,通过 ControllerFeatureProvider 和 IApplicationModelConvention 实现了将普通类识别为 Controller 并修改全局路由规则。讨论了集成 Swagger 和 WebApiClient 来解决 API 文档和调用问题,强调了维护 API 资产和在线文档的重要性。最后提到了更优雅的调用方式和对微服务设计中常见问题的思考。整体内容展示了动态 Controller 的实现思路和相关技术应用。
使用 ASP.NET Core 和 Hangfire 实现 HTTP 异步化方案 Payne在博客中分享了对XML与JSON在数据交换中的使用背景与困扰,探讨了HTTP异步化方案中的实际场景与解决方法。他介绍了Hangfire作为Quartz的替代品的使用方法和可扩展性,展示了通过HTTP调用的HttpJob的实现方式,以及如何使用Hangfire进行任务调度和记录日志。整体内容围绕着异步化处理、后台任务系统的应用与扩展展开,为读者提供了一些实践参考和技术思路。
通过动态 Controller 实现从 WCF 到 Web API 的迁移 这篇文章介绍了如何通过 Castle 的动态代理来实现将 WCF 接口迁移到 Web API 上的过程。通过组合类和接口,借助 Castle 的 Dynamic Proxy 实现动态生成 Controller,替换默认组件以实现 WCF 接口通过 Web API 访问。文章还涵盖了 ASP.NET MVC 的原理、自定义组件的实现、容器注册替换、HTTP 动词支持和接口返回值优化等内容。最后提到了在 ASP.NET Core 中的 POCOController 特性,使得将任意类作为 Controller 更加简单。文章内容详实,为实现 WCF 到 Web API 的迁移提供了指导和思路。
又见 AOP 之基于 RealProxy 实现 WCF 动态代理 最近在研究如何同步数据在 Mongodb 和 ElasticSearch 之间,发现历史遗留问题涉及 WCF 动态代理的实现。通过 RealProxy 实现 WCF 动态代理可以解决手写代理类的问题,同时介绍了 Castle.DynamicProxy 的应用,以及迁移到 .NET Core的思路。动态代理通过 AOP 的方式隐藏了底层细节,实现了调用者无需关心 ChannelFactory 等细节,简化了WCF服务调用的过程。通过动态代理,实现了一次编写,多处运行的目的,提高了代码复用性和可维护性。
WSL 下 Docker 使用踩坑小记 Win10的Linux子系统(WSL)让在Windows系统中使用Linux成为可能,避免了双系统的麻烦。探讨在WSL中使用Docker时遇到的问题,包括无法连接Docker守护进程、需要安装Docker for Windows、设置DOCKER_HOST地址、解决终端关闭后连接中断等。提到分区挂载的区别,WSL中路径更符合Linux习惯,而Docker for Windows则更符合Windows习惯。建议修改WSL配置文件以处理分区挂载相关问题。总结体验,逐渐将Linux工作迁移到WSL上,避免双系统维护带来的分散精力。未来将分享.NET Core下的日志分析平台构建内容。
《阿里巴巴 Java 开发手册》读书笔记 最近借阅了几本书来充实自己,其中包括阿里巴巴开发手册的关键点分享。内容涵盖了编程规范如命名规范、可变参数使用、接口修改、循环内字符串连接、循环遍历操作、单例对象线程安全等;异常日志部分强调异常处理、finally块资源关闭、数据库规范包括字段命名、冗余字段、分库分表、唯一索引建立、join表限制、存储过程禁用及IN操作控制等。规范性、性能优化以及异常处理方面的注意事项贯穿其中。
聊聊前端跨域的爱恨情仇 本文介绍了前端跨域的两种主流解决方案:JSONP和CORS。JSONP利用可执行的JavaScript返回数据,需要预先定义回调函数,仅支持GET请求。而CORS是官方推荐的跨域解决方案,通过HTTP头部信息来允许或禁止不同域下的资源访问,支持除GET外的请求动词。文章详细解释了两者的工作原理、实际应用和区别,同时展示了.NET Core中如何配置CORS策略。通过示例演示了JSONP和CORS的实际应用过程和区别,总结了前端跨域问题的解决方案。
基于 Server-Sent Events 实现服务端消息推送 本文介绍了服务器推送事件(Server-Sent Events,简称SSE)技术,这是一种允许服务器向客户端主动推送信息的技术。作者因项目需求,需要在 APP 端和 PC 端之间实现任务领取通知的功能,通过使用 SSE 技术,避免了轮询方式带来的性能问题。文章详细解释了 SSE 的基本概念、与 WebSocket的区别、服务端和客户端的实现方法,并以 .NET 为例,展示了如何在服务端集成 SSE。作者还提供了一个简单的客户端实现示例,并对比了 SSE 与其他技术的优劣。最后,作者总结了选择 SSE 的原因,并提供了相关参考文章。
记通过 EF 生成不同数据库 SQL 脚本的一次尝试 本文讨论了使用 Entity Framework(EF)生成不同数据库 SQL 脚本的方法。作者首先介绍了数据库和面向对象之间的天然阻抗,以及 ORM 和 SQL 之间的争论。他提出了使用 ORM 生成 SQL 脚本的解决方案,并详细讨论了在 EF6 和 EF Core 中实现这一目标的不同方法。对于EF6,作者展示了如何通过继承 DbCommandInterceptor 类并重写方法来创建拦截器,从而记录 ORM 生成的 INSERT 和UPDATE SQL 语句。对于 EF Core,由于缺乏拦截器,作者介绍了如何通过实现 ILogger 接口和 ILoggerProvider 接口来注入自定义日志记录器,以捕获 EF 生成的 SQL 语句。文章最后总结了使用 EF 生成SQL 脚本的好处,并提出了对日志记录功能的进一步应用,如数据库的主从复制和读写分离,这些将在后续博客中讨论。
漫谈前端进化史之从 Form 表单到文件上传 本文探讨了文件上传相关内容,从HTTP协议的角度讨论了multipart/form-data的实现和变化。讲述了Form表单在HTTP请求中的作用以及不同的Content-Type编码方式。详细分析了文件上传的原理和HTTP与文件上传的关系,强调了multipart/form-data的重要性。最后,介绍了前端文件上传的新思路,包括使用FormData对象和不同的文件上传方式。总结强调了Form表单和FormData对象之间的联系,指出它们可以相互转化,形成了一个完整的文件上传的讨论。