ASP NET MVC OutputCache VaryByParam 复杂对象
ASP NET MVC OutputCache VaryByParam complex objects
这是我的:
[OutputCache(Duration = 3600, VaryByParam = "model")]
public object Hrs(ReportFilterModel model) {
var result = GetFromDatabase(model);
return result;
}
我希望它为每个不同的模型缓存一个新结果。目前它正在缓存第一个结果,即使模型发生变化,它也会 returns 相同的结果。
我什至试图覆盖 ReportFilterModel 的 ToString
和 GetHashCode
方法。实际上我有更多的属性要用于生成唯一的 HashCode
或 String
.
public override string ToString() {
return SiteId.ToString();
}
public override int GetHashCode() {
return SiteId;
}
有什么建议吗,我怎样才能让复杂的对象与 OutputCache
一起工作?
来自 MSDN 的 VaryByParam 值:分号分隔的字符串列表,对应于 GET 方法的查询字符串值,或 [=28= 的参数值]方法。
如果要根据所有参数值改变输出缓存,请将属性设置为星号 (*)。
另一种方法是创建 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;
}
}
在控制器中:
[OutputCacheComplex(typeof (ReportFilterModel))]
更多信息:
How do I use VaryByParam with multiple parameters?
这是我的:
[OutputCache(Duration = 3600, VaryByParam = "model")]
public object Hrs(ReportFilterModel model) {
var result = GetFromDatabase(model);
return result;
}
我希望它为每个不同的模型缓存一个新结果。目前它正在缓存第一个结果,即使模型发生变化,它也会 returns 相同的结果。
我什至试图覆盖 ReportFilterModel 的 ToString
和 GetHashCode
方法。实际上我有更多的属性要用于生成唯一的 HashCode
或 String
.
public override string ToString() {
return SiteId.ToString();
}
public override int GetHashCode() {
return SiteId;
}
有什么建议吗,我怎样才能让复杂的对象与 OutputCache
一起工作?
来自 MSDN 的 VaryByParam 值:分号分隔的字符串列表,对应于 GET 方法的查询字符串值,或 [=28= 的参数值]方法。
如果要根据所有参数值改变输出缓存,请将属性设置为星号 (*)。
另一种方法是创建 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;
}
}
在控制器中:
[OutputCacheComplex(typeof (ReportFilterModel))]
更多信息: How do I use VaryByParam with multiple parameters?