ASP NET MVC OutputCache VaryByParam复杂对象

Jaa*_*nus 4 c# asp.net-mvc caching outputcache

这就是我所拥有的:

[OutputCache(Duration = 3600, VaryByParam = "model")]
public object Hrs(ReportFilterModel model) {
    var result = GetFromDatabase(model);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我希望它为每个不同的模型缓存一个新结果.目前它正在缓存第一个结果,即使模型发生变化,它也会返回相同的结果.

我甚至试图覆盖ReportFilterModel的方法ToStringGetHashCode方法.实际上我有更多的属性我想用来生成独特的HashCodeString.

public override string ToString() {
    return SiteId.ToString();
}

public override int GetHashCode() {
    return SiteId;
}
Run Code Online (Sandbox Code Playgroud)

任何建议,我如何使用复杂的对象OutputCache

Dan*_*and 11

来自MSDN的VaryByParam值:以分号分隔的字符串列表,对应于GET方法的查询字符串值或POST方法的参数值.

如果要按所有参数值更改输出缓存,请将该属性设置为星号(*).

另一种方法是创建OutputCacheAttribute和用户反射的子类来创建VaryByParam字符串.像这样的东西:

 public class OutputCacheComplex : OutputCacheAttribute
    {
        public OutputCacheComplex(Type type)
        {
            PropertyInfo[] properties = type.GetProperties();
            VaryByParam = string.Join(";", properties.Select(p => p.Name).ToList());
            Duration = 3600;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在控制器中:

[OutputCacheComplex(typeof (ReportFilterModel))]
Run Code Online (Sandbox Code Playgroud)

有关详细信息: 如何将VaryByParam与多个参数一起使用?

https://msdn.microsoft.com/en-us/library/system.web.mvc.outputcacheattribute.varybyparam(v=vs.118).aspx