2013-11-14 2 views
1

Если я получаю запрос от Паука, я запускаю процесс Phantom JS и отменяю динамический HTML. (Использование фильтра OnExecuting и установка ActionResult)ASP.NET MVC Предотвращение OutputCache, если запрос от паука

Но фильтр OutputCache также установлен на этом методе, и он мешает !.

например:

шаг 1. Загрузите страницу с обычным агентом пользователя. (Кэш вывода кэширует URL-адрес) Шаг 2. Загрузите страницу с помощью агента пользователя-паука. (предыдущий кешированный ответ отправляется спайдеру, а мой Phantom JS фильтр никогда не запускается)

ответ

1

Используйте команду VaryByCustom, чтобы заставить «Кэш-мисс», когда запрос поступает из поискового робота.

В вашем Controller/Action:

[OutputCache(VaryByCustom="Crawler")] 
public ActionResult Index() 
{ 
    // ... 
    return View(); 
} 

Тогда в ваших Global.asax:

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if (arg == "Crawler" && context.Request.Browser.Crawler) 
      return Guid.NewGuid().ToString(); 

    return base.GetVaryByCustomString(context, arg); 
} 
+0

Это работает только OutputCacheLocation.None или OutputCacheLocation.Server или NoStore = верно по крайней мере в MVC 5 – LostInComputer

+0

@LostInComputer, чтение текст OP «предыдущий кешированный ответ отправляется пауку», очевидно, что он использует «OutputCacheLocation.Server». – haim770

+0

Возможно, я неправильно понял проблему. Я думал, что он хочет отключить кеширование серверов и удалить кеширование клиентов, если реквестер является искателем – LostInComputer