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

时间:2017-08-27 16:44:48

标签: caching asp.net-core asp.net-core-mvc responsecache

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

我已经弄清楚如何从请求中获取国家/地区代码(它涉及从数据库中读取,价格昂贵,所以我只想针对需要国家/地区的操作执行此操作),但我不知道该怎么做缓存部分。

我正在考虑编写一个中间件(例如名为CountryResolver),该中间件将在响应缓存中间件之前运行,并在请求中设置国家/地区SOMEHOW,并使响应缓存中间件因国家/地区而异。

app.UseCountryResolver();
app.UseResponseCaching();

我面临两个主要问题:

问题1-

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

[CountryRequired]
[ResponseCache(VaryByQueryKeys = new string[] { "country"}]
public IActionResult MyAction()
{

但是,我不知道中间件如何能够拾取具有此类注释的操作,以便它可以决定是否查找该国家。

问题2-“...在请求中设置国家SOMEHOW”

我正在考虑使用VaryByQueryKeys并让中间件将国家/地区设置为名为“country”的查询字符串键,但是HttpContext.Request.Query集合是只读的。所以我不确定我可以使用其他机制。

非常感谢任何帮助。

0 个答案:

没有答案