Caching Asp.net核心响应缓存(按国家/地区)

Caching Asp.net核心响应缓存(按国家/地区),caching,asp.net-core,asp.net-core-mvc,responsecache,Caching,Asp.net Core,Asp.net Core Mvc,Responsecache,我需要根据请求来自的国家/地区,对某些控制器操作使用响应缓存 我已经知道了如何从请求中获取国家代码(这涉及到从数据库读取,成本很高,所以我只想为需要国家的操作执行此操作),但我不确定如何执行缓存部分 我正在考虑编写一个中间件(例如,名为CountryResolver),它将在响应缓存中间件之前运行,并在请求中以某种方式设置国家,并使响应缓存中间件因国家而异 app.UseCountryResolver(); app.UseResponseCaching(); 我面临两个主要问题: 问题1- 我

我需要根据请求来自的国家/地区,对某些控制器操作使用响应缓存

我已经知道了如何从请求中获取国家代码(这涉及到从数据库读取,成本很高,所以我只想为需要国家的操作执行此操作),但我不确定如何执行缓存部分

我正在考虑编写一个中间件(例如,名为
CountryResolver
),它将在响应缓存中间件之前运行,并在请求中以某种方式设置国家,并使响应缓存中间件因国家而异

app.UseCountryResolver();
app.UseResponseCaching();
我面临两个主要问题:

问题1-

我需要的不是为每个请求运行中间件,而是只为路由到特定国家/地区操作的某些请求运行中间件。我正在考虑通过一个自定义属性(例如,
[CountryRequired]
)来注释这些特定于国家的操作

但是,我不知道中间件如何拾取具有此类注释的操作,以便决定是否查找国家/地区

问题2-“…在请求中以某种方式设置国家”

我正在考虑使用
VaryByQueryKeys
并让中间件将country设置为名为“country”的查询字符串键,但
HttpContext.Request.query
集合是只读的。因此,我不确定我可以使用什么其他机制来实现这一点

非常感谢您的帮助。

您看到了吗?看起来类似,但适用于ASP.NET 4.x。
[CountryRequired]
[ResponseCache(VaryByQueryKeys = new string[] { "country"}]
public IActionResult MyAction()
{