有没有办法让ASP.NET MVC 3 OutputCache因深度属性而异?

问题描述:

我测试了ASP.NET MVC 3 OutputCache属性和行为如下:有没有办法让ASP.NET MVC 3 OutputCache因深度属性而异?

  • 如果不指定VaryByParam属性,它会自动将所有参数变化
  • 如果您指定,但那些用逗号状“参数1,参数2”分离只是改变

但是如果你的行动有复杂的参数,比方说,一个人,我不能让它通过人的属性发生变化。比方说.. Person.Name

我不能让说什么或明确指定model.Name

工作neighter有没有办法我能做到这一点?

您可以通过发送Person.Name作为附加参数(仅用于缓存)来破解API,也可以使用VaryByCustom属性选项并提供您自己的解析器。在第二种情况下,你需要编辑Global.asax并覆盖GetVaryByCustomString方法:

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if(custom == "Person") 
    { 
     // extract Person.Name here and return it 
    } 
    return String.Empty; 
} 

然后加入VaryByCustom="Person"到您的属性声明。

+0

我正在寻找更直接的解决方案。在这种情况下,我宁愿按照核心缓存参数是标量的方式来安排操作。不管怎样,谢谢你 :) –