【问题标题】:Use output caching VaryByParam with JSON request将输出缓存 VaryByParam 与 JSON 请求一起使用
【发布时间】:2015-07-02 17:48:57
【问题描述】:

我有一个接收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),
  ...
});

【问题讨论】:

    标签: jquery json asp.net-mvc asp.net-mvc-5 outputcache


    【解决方案1】:

    VaryByCustom是你的朋友!

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

    查看 this 博客,该博客解释了如何创建自己的实现。

    希望对你有帮助

    【讨论】:

    • 谢谢,我知道 VaryByCustom,我用它来指定用户级缓存。但是,要实现这一点似乎相当复杂,因为我应该以某种方式“盲目地”解析 JSON 请求正文以提取所需的属性,我还不知道从哪里开始,但我会试一试。
    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多