首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NETMVC OutputCache VaryByParam复杂对象

ASP.NETMVC OutputCache VaryByParam复杂对象
EN

Stack Overflow用户
提问于 2015-05-22 11:20:27
回答 1查看 6K关注 0票数 5

这就是我所拥有的:

代码语言:javascript
复制
[OutputCache(Duration = 3600, VaryByParam = "model")]
public object Hrs(ReportFilterModel model) {
    var result = GetFromDatabase(model);
    return result;
}

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

我甚至试图为ToStringGetHashCode方法重写ReportFilterModel。实际上,我想要使用更多的属性来生成唯一的HashCodeString

代码语言:javascript
复制
public override string ToString() {
    return SiteId.ToString();
}

public override int GetHashCode() {
    return SiteId;
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-22 11:42:40

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

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

另一种方法是创建OutputCacheAttribute的子类和用户反射,以创建VaryByParam字符串。就像这样:

代码语言:javascript
复制
 public class OutputCacheComplex : OutputCacheAttribute
    {
        public OutputCacheComplex(Type type)
        {
            PropertyInfo[] properties = type.GetProperties();
            VaryByParam = string.Join(";", properties.Select(p => p.Name).ToList());
            Duration = 3600;
        }
    }

在财务主任一职中:

代码语言:javascript
复制
[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

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30395376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档