Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法使ASP.NET MVC 3 OutputCache因深度属性而异?_.net_Asp.net Mvc_Caching - Fatal编程技术网

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

有没有办法使ASP.NET MVC 3 OutputCache因深度属性而异?,.net,asp.net-mvc,caching,.net,Asp.net Mvc,Caching,我正在测试ASP.NET MVC 3OutputCache属性,其行为如下: 如果不指定VaryByParam属性,它将根据所有参数自动变化 如果您指定,它将仅与用逗号分隔的值不同,如“param1,param2” 但是如果你的动作有一个复杂的参数,比如说,一个人,我不能让它随人的属性而变化。比如说。。人名 我不能通过什么都不说或显式指定model.Name来让它工作得更好 有什么方法可以做到这一点吗?您可以通过发送Person.Name作为附加参数(只是为了缓存),稍微修改一下API,或者

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

  • 如果不指定VaryByParam属性,它将根据所有参数自动变化
  • 如果您指定,它将仅与用逗号分隔的值不同,如“param1,param2”
但是如果你的动作有一个复杂的参数,比如说,一个人,我不能让它随人的属性而变化。比如说。。人名

我不能通过什么都不说或显式指定model.Name来让它工作得更好


有什么方法可以做到这一点吗?

您可以通过发送
Person.Name
作为附加参数(只是为了缓存),稍微修改一下API,或者使用属性选项并提供自己的解析器。在第二种情况下,您需要编辑您的
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”
添加到属性声明中。

我正在寻找一个更简单的解决方案。在这种情况下,我更愿意以这样一种方式来安排操作,即核心缓存参数是标量的。无论如何,谢谢你:)