【发布时间】:2016-06-16 15:51:55
【问题描述】:
我正在我的解决方案中实现输出缓存,并发现了涵盖此特定场景的问题。
有一个搜索动作有几个参数,第一个是搜索的文本,其余的是过滤器、排序、偏移和限制。它看起来有点像这样:
public async Task<ActionResult> Search(
string query = "",
ushort limit = 12,
int offset = 0,
int filter1 = 0,
int filter2 = 0,
SortObject sort = null)
{
}
问题是,最常使用没有查询的过滤搜索,我想缓存那种结果。但是,如果有人使用文本查询,它很可能每次都是唯一的,所以我认为缓存这些并浪费内存空间没有意义。
我使用了以下OutputCacheAttribute 来实现这一点:
[OutputCache(Duration = 3600, VaryByParam = "filter1;filter2;limit;offset;sort")]
但是(正如预期的那样)它不起作用,因为它完全忽略了query 参数并缓存其他参数的每个更改。
我想要实现的是缓存 query 参数为空的结果,而其他参数正在更改。但是,如果query参数不为空,我希望请求去总是去代码。
输出缓存可以实现吗?
【问题讨论】:
-
你试过用
VaryByCustom代替吗? -
我已经阅读过它,但是(基于示例)它似乎更像是一种基于自定义字符串(或浏览器类型和版本)创建更多缓存版本的机制。我需要的是防止将结果存储在
!string.IsNullOrEmpty(query)的缓存中,这可以通过VaryByCustom实现吗?
标签: c# asp.net-mvc caching outputcache