app
-
C#中const和readonly有什么不同 – 定义不可变常量的两种方式
const是编译时常量,值必须在声明时确定且仅支持基本类型和enum;readonly是运行时常量,可在构造函数中赋值,支持任意类型,可为实例成员。 在C#中,const 和 readonly 都可用于定义不可变的值,但它们在使用方式、生命周期和适用场景上有本质区别。理解这些差异有助于写出更安全、高…
-
C# 如何使用互斥锁(Mutex) – 实现跨进程的线程同步
Mutex是C#中用于跨进程线程同步的互斥锁,通过命名Mutex实现多进程间的资源访问控制,确保同一时间仅一个进程能进入临界区;1. 使用new Mutex(true, “name”, out createdNew)创建命名Mutex,名称需唯一(如用GUID),若creat…
-
C# 如何使用AutoMapper – 简化对象之间的映射
AutoMapper 是 C# 中简化对象映射的常用库,通过配置 Profile 类定义 CreateMap 规则并注入 IMapper 接口,即可用一行代码完成实体与 DTO 的双向转换,支持忽略、条件映射和集合映射,需注意属性匹配、嵌套映射及空值处理。 AutoMapper 是 C# 中简化对象…
-
C# 如何使用HttpClientFactory – 管理HttpClient生命周期的最佳实践
不能每次都new HttpClient,因其设计为长生命周期对象,频繁创建会致Socket耗尽。正确做法是使用IHttpClientFactory管理实例。推荐使用类型化客户端封装逻辑,配合命名客户端区分服务目标,并集成Polly实现重试熔断。注册AddHttpClient后由DI容器统一管理生命周…
-
YARP:一个用.NET构建的可扩展反向代理项目入门
YARP是微软维护的基于.NET的高性能反向代理库,可集成到ASP.NET Core应用中,支持路由、重写、负载均衡和健康检查。相比Nginx等通用代理,YARP优势在于深度融入.NET生态,适合需要定制化代理逻辑的场景,如微服务网关、API聚合、灰度发布和本地开发代理。通过简单配置即可实现请求转发…
-
C# Environment类的常用属性 – 获取系统信息和特殊文件夹路径
Environment类提供系统信息和环境变量操作,如OS版本、.NET版本、计算机名、用户名、处理器数量及64位判断;通过GetFolderPath获取桌面、文档、AppData等特殊文件夹路径;支持当前目录、环境变量读写及进程退出,适用于跨平台配置管理与文件操作。 Environment 类是 …
-
C# Entity Framework Core中的迁移(Migrations) – 数据库架构的版本控制
迁移是EF Core数据库版本控制机制,通过add-migration生成Up/Down方法脚本,update-database执行并记录至__EFMigrationsHistory表;开发中需及时生成、检查脚本、避免冲突;生产环境应导出SQL交DBA审核,禁用业务逻辑;注意重命名、多上下文等特殊处…
-
C# 如何使用log4net或Serilog – 配置强大的日志记录框架
推荐新项目优先选Serilog,因其结构化日志支持好、配置简洁;老项目可继续用log4net。1. Serilog支持命名参数记录,便于查询分析,配置通过代码或JSON完成,集成ASP.NET Core只需UseSerilog()。2. log4net依赖XML配置,扩展性较弱,需手动桥接ILogg…
-
Minimal APIs in ASP.NET Core:轻量级.NET后端开发新范式
Minimal APIs是ASP.NET Core 6引入的轻量级Web开发方式,无需控制器即可定义HTTP端点。通过顶级语句简化代码,适合微服务、原型验证和入门学习。示例中用几行代码注册GET接口,体现其简洁性。支持依赖注入与方法提取,可保持复杂逻辑清晰。与MVC相比,Minimal APIs牺牲…
-
C# 如何进行HTTP POST请求 – 使用HttpClient发送JSON数据
在C#中使用HttpClient发送JSON POST请求需序列化对象为JSON、用StringContent包装并设置application/json类型,再调用PostAsync;应重用HttpClient实例、捕获HttpRequestException、设置超时及必要请求头。 在C#中使用 …