Aspnet-Core

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

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

ASP.NET Core 内存缓存实战:一篇搞懂该怎么配、怎么避坑

引言 这篇文章我们来聊一聊 asp.net core 的内存缓存。asp.net core 内存缓存(IMemoryCache)是一个轻量级的缓存方案,适用于单实例应用或者分布式环境中的本地缓存。它提供了简单的 API 来存储和检索数据,同时支持过期策略、优先级设置等功能。 什么是缓存 从用户请求到数据库返回数据,这是一个漫长的过程(夸张了点,通常也就是几十毫秒到几百毫秒)。可是又不止一个用户在访 …

ASP.NET Core 外部依赖调用治理实战:HttpClientFactory、Polly 与幂等边界

订单服务最容易出现的稳定性问题,不是业务代码写错,而是下游支付、库存、短信网关一抖,整个接口成功率跟着雪崩。看起来只是一次超时,实际上会引发重试风暴、线程池占满、数据库回写积压。今天这篇就只做一件事:把外部依赖调用链路收敛到可控、可观测、可恢复的状态。 1. 问题背景:服务没挂,为什么成功率先掉 线上经常出现这种现象: API 进程还活着,CPU 占用也不高,可能只有40%(举个例子,非真实数 …

ASP.NET Core 认证与授权实战:JWT、Policy 与权限边界落地

这篇文章不讨论完整身份平台建设,只聚焦 ASP.NET Core 里最常见、也最容易出错的一段:JWT 认证、Policy 授权,以及资源级权限边界该怎么落到代码里。 问题背景 真实现场:一个后台退款接口原本只允许财务角色调用,但线上排查发现,普通运营账号只要拿到有效 token,也能调用成功。 根因并不复杂: 接口加了 [Authorize] 系统只校验“是否登录” 没有继续校验角色、权限和资源 …

从 IApplicationBuilder 到 RequestDelegate:ASP.NET Core 请求管线性能与可观测性

很多团队做性能优化时,第一反应是改 SQL、加缓存、扩机器。结果接口还是慢,而且慢得不稳定。 这类问题里,有一部分根因并不在业务代码,而在请求进入业务之前就已经产生了: 中间件顺序、重复序列化、过重日志、异常处理位置不当,都会把每个请求的固定成本悄悄抬高。 这篇文章我们不讲抽象概念,直接从一个真实工程场景出发,拆开 ASP.NET Core 请求管线,回答三个问题: 请求管线到底是怎么执行的 哪些 …

开发实战:ASP.NET Core + EF Core 实现动态可扩展的分页方案

引言 欢迎阅读,这篇文章主要面向初级开发者。 在开始之前,先问你一个问题:你做的系统,是不是每次增加一个查询条件或者排序字段,都要去请求参数对象里加一个属性,然后再跑去改 EF Core 的查询逻辑? 如果是,那这篇文章应该对你有用。我会带你做一个统一的、扩展起来不那么麻烦的分页查询方案。整体思路是四件事:​统一入参、统一出参、动态排序、动态过滤​。 …

开发实战:在 ASP.NET Core 与 EF Core 中,实现多租户数据隔离

在一个项目中,方便为多个客户提供服务,我们需要实现多租户系统。多租户系统,就是多个客户共享一个运行的项目实例,同时确保每个客户的数据安全隔离(你看不见我,我看不见你)。 这篇文章,我们将落地在 ASP.NET Core 和 Entity Framework Core 中,基于 TenantId 的全局过滤机制,实现多租户数据隔离。 原理解析 先确定隔离模型 多租户常见有三种模型: 每个租户一套数据 …

聊聊 ASP.NET Core 中间件和过滤器的区别

引言 不知道你有没有在面试中遇到过这样的问题:“中间件和过滤器的区别是什么?",或者在平时开发中思考过:“一个请求进来,ASP.NET Core 到底是怎么一步步处理它的?” 这篇文章就来聊聊,不会涉及太深的源码,主要面向初级开发者,帮你建立一个清晰的认知。 先说中间件 中间件是 ASP.NET Core 处理 HTTP 请求的基本部件,是框架本身的组 …