gpt4 book ai didi

c# - ASP NET MVC OutputCache VaryByParam 复杂对象

转载 作者:太空狗 更新时间:2023-10-30 00:14:17 25 4
gpt4 key购买 nike

这是我的:

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

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

我什至试图覆盖 ReportFilterModel 的 ToStringGetHashCode 方法。实际上,我有更多属性要用于生成唯一的 HashCodeString

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

public override int GetHashCode() {
return SiteId;
}

有什么建议吗,我怎样才能让复杂的对象与 OutputCache 一起工作?

最佳答案

来自 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;
}
}

在 Controller 中:

[OutputCacheComplex(typeof (ReportFilterModel))]

更多信息: How do I use VaryByParam with multiple parameters?

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

关于c# - ASP NET MVC OutputCache VaryByParam 复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30395376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com