Использовать кэширование вывода VaryByParam с JSON-запросом

У меня есть действие контроллера, который получает 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),
  ...
});

1 ответ

VaryByCustom твой друг!

Переопределить VaryByCustom метод в вашем global.asax.cs файл. Это позволяет вам создать свою собственную проверку и, поскольку у вас есть доступ к HTTPContext, вы сможете проверить значения сообщений из тела сообщения.

Проверьте этот блог, который объясняет, как вы можете создать свою собственную реализацию.

Надеюсь это поможет

Другие вопросы по тегам