我需要根据请求来自的国家/地区对某些控制器操作使用响应缓存。
我已经想出了如何从请求中获取国家代码(它涉及从数据库中读取,价格昂贵,所以我只想为需要国家的操作执行此操作),但我不确定如何进行缓存部分.
我正在考虑编写一个中间件(例如,命名为CountryResolver
),它将在响应缓存中间件之前运行,并在请求中设置国家/地区,并使响应缓存中间件因国家/地区而异。
app.UseCountryResolver();
app.UseResponseCaching();
我面临两个主要问题:
问题 1-
我需要该中间件不是针对每个请求都运行,而仅针对路由到特定国家/地区操作的某些请求。我正在考虑通过自定义属性(例如,[CountryRequired]
)注释此类特定于国家/地区的操作。
[CountryRequired]
[ResponseCache(VaryByQueryKeys = new string[] { "country"}]
public IActionResult MyAction()
{
但是我不知道中间件如何获取具有此类注释的操作,以便它可以决定是否查找国家/地区。
问题 2-“...在请求中设置国家/地区”
我正在考虑使用VaryByQueryKeys
并让中间件将国家设置为名为“国家”的查询字符串键,但HttpContext.Request.Query
集合是只读的。所以我不确定我可以为此使用什么其他机制。
非常感谢任何帮助。