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

时间:2011-10-21 14:17:54

标签: .net asp.net-mvc caching

我正在测试ASP.NET MVC 3 OutputCache属性,行为如下:

  • 如果您未指定VaryByParam属性,它将自动因所有参数而异
  • 如果您指定,它将因逗号分隔的那些而变化,例如“param1,param2”

但是如果你的Action有一个复杂的参数,比方说,一个Person,我不能让它因Person的属性而变化。让我们说.. Person.Name

我无法通过说什么或明确指定model.Name

来使其工作更直接

我有办法做到吗?

1 个答案:

答案 0 :(得分:1)

您可以通过发送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"添加到您的属性声明中。