.Net 5使用AspNetCore.CacheOutput时Action过滤器不生效问题咨询
问题排查与修复方案
1. OnAction系列方法不执行的原因
你重写的OnActionExecuting/OnActionExecuted不会触发属于正常情况,不是库的已知问题:你继承的第三方库的CacheOutputAttribute基类仅实现了**结果过滤器(IResultFilter)**接口,没有实现动作过滤器(IActionFilter)接口,所以只有结果过滤器的两个方法OnResultExecuting/OnResultExecuted会被ASP.NET Core的过滤器管道调用,动作过滤器的相关方法本身就没有注册到管道中,自然不会执行。
2. 缓存不生效的两个核心问题
- 缺失服务与中间件注册:你现在贴的
Startup.cs代码里没有加CacheOutput的注册逻辑,需要补充两处配置:- 在
ConfigureServices方法中添加services.AddCacheOutput(); - 在
Configure方法中,app.UseRouting()之后、app.UseEndpoints()之前添加app.UseCacheOutput();
没有注册中间件的情况下缓存逻辑完全不会运行,自然不会生成缓存。
- 在
- 参数名大小写不匹配:你路由模板里写的是
{TestId}(首字母大写),但Action入参名是testId(首字母小写)。CacheOutput生成缓存Key时会严格匹配参数名大小写,参数名不匹配会导致缓存Key生成失败,无法触发缓存逻辑。把路由模板改为{testId}和入参名保持一致即可。
3. 接口能正常返回的原因
ASP.NET Core的模型绑定逻辑默认是大小写不敏感的,所以即使路由参数名和入参名大小写不一致,也能正常匹配到参数值,所以接口可以正常返回结果,和缓存逻辑是否生效无关。
内容的提问来源于stack exchange,提问作者Lee Z
相关产品推荐
相关产品推荐

