Jquery 将输出缓存VaryByParam与JSON请求一起使用

Jquery 将输出缓存VaryByParam与JSON请求一起使用,jquery,json,asp.net-mvc,asp.net-mvc-5,outputcache,Jquery,Json,Asp.net Mvc,Asp.net Mvc 5,Outputcache,我有一个控制器动作,它接收一个Person类型参数。使用基于JSON的模型绑定功能从JSON请求绑定参数 我的VaryByParam在本例中不起作用,因为请求不包含任何“经典”变量(例如GET或POST),但在本例中,数据位于HTTP正文中。在客户端,我使用KnockoutJS,因此我使用ko.toJSON方法发布数据 如何根据JSON请求中的字段值实现输出缓存 该示例仅用于演示 // model public class Person { public int PersonID { ge

我有一个控制器动作,它接收一个
Person
类型参数。使用基于JSON的模型绑定功能从JSON请求绑定参数

我的
VaryByParam
在本例中不起作用,因为请求不包含任何“经典”变量(例如GET或POST),但在本例中,数据位于HTTP正文中。在客户端,我使用
KnockoutJS
,因此我使用
ko.toJSON
方法发布数据

如何根据JSON请求中的字段值实现输出缓存

该示例仅用于演示

// model

public class Person {
  public int PersonID { get; set; }
  public string Name { get; set; }
}

// action

[OutputCaching(Duration = 60, VaryByParam = "PersonID")]
public JsonResult Process(Person person) {
  ...
}

// client-side

$.post({
  url: '/mycontroller/myaction',
  ...
  data: ko.toJSON(personViewModel),
  ...
});

VaryByCustom
是你的朋友

覆盖
global.asax.cs
文件中的
VaryByCustom
方法。这允许您创建自己的检查,并且由于您可以访问此处的HTTPContext,因此您将能够检查消息正文中的post值

查看解释如何创建自己的实现的博客


希望这有帮助

谢谢,我知道VaryByCustom,我用它来指定用户级缓存。然而,要实现这一点似乎相当复杂,因为我应该以某种方式“盲目”解析JSON请求体以提取所需的属性,我还不知道从哪里开始,但我会尝试一下。