2015-05-26 4 views
0

Я использую OutputCache в MVC, но у меня возникли трудности с кэшированием, когда к URL-адресу добавлена ​​метка времени.OutputCache Ignore Timestamp

В частности, компонент AJAX jQuery добавляет _ = 21321423432 в конец URL-адреса.

Каждый раз, когда я вызываю URL-адрес действия, он всегда переходит в действие вместо того, чтобы возвращать кешированный элемент.

Я использую элементы VarybyParam VarByCustom & для кэширования на основе зарегистрированного пользователя и дат начала и окончания.

Действие

[OutputCache(CacheProfile = "FeedCache")] 
    public async Task<JsonResult> Feed(DateTime start, DateTime end) 
    { 
     //Do something 

     return Json(result, JsonRequestBehavior.AllowGet); 
    } 

Config

<add name="FeedCache" duration="600" varyByParam="start;end" varyByCustom="user" location="Server" /> 

Global.asmx

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 

    // 
    // Vary by logged in user 
    // 
    if (custom == "user") 
    { 

     return "user=" + context.User.Identity.Name; 

    } 

    return base.GetVaryByCustomString(context, custom); 
} 

Я был под оттиском иона, это будет кэшировать специально для пользователя & начальные и конечные параметры, однако это не так. Есть что-то, что мне не хватает?

ответ

0

Если я уточнить детали OutputCache в атрибуте, а не как cacheprofile в WebConfig он работает.

Работы

[OutputCache(Duration = 600, Location = OutputCacheLocation.Server, VaryByParam = "start;end", VaryByCustom = "user")] 

не работает

[OutputCache(CacheProfile = "FeedCache")] 

<add name="FeedCache" duration="600" varyByParam="start;end" varyByCustom="user" location="Server" /> 

Я действительно хотел бы знать, почему они имеют разные модели поведения ...

0

jQuery's AJAX component appends a "_={timestamp}" only when you set cache option to false or for dataTypes 'script' and 'jsonp' Возможно, вы вернете массив объектов JSON, поэтому постарайтесь добавить cache:true в свои параметры ajax. Он должен быть похож на:

$.ajax({ 
     type: ..., 
     url: ...,   
     cache: true, 
     success: function (data) { 
     } 
    }); 
+0

Спасибо за ваш ответ - К сожалению, я не могу рисковать кэшированием данных браузером, поскольку он содержит данные пользователя. – heymega

+0

Это не подвергает риску любые данные, которые просто передают управление кешем на сервер. Таким образом, если у вас установлен OutputCache, он будет отвечать за стратегию кеширования –

+0

Кодирует кеширование браузеров GET, поэтому вызов никогда не будет выполняться на сервере. – heymega