2015-04-24 2 views
0

У меня есть действие контроллера, которое получает параметр типа Person. Параметр связан с запросом JSON с использованием функции привязки модели JSON.Использовать выходное кэширование VaryByParam с запросом 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), 
    ... 
}); 

ответ

0

VaryByCustom - ваш друг!

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

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

Надеется, что это помогает

+0

спасибо, я в курсе VaryByCustom, я использовал его, чтобы указать кэширование на уровень пользователя. Тем не менее, для реализации этого, кажется, довольно сложно, потому что я должен «слепо» разобрать тело запроса JSON каким-то образом, чтобы извлечь требуемые свойства, я точно не вижу, с чего начать, но я попробую. –

Смежные вопросы