ASP.NET MVC Предотвратить OutputCache, если запрос от паука

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

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

E.G:

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


person williamsandonz    schedule 14.11.2013    source источник


Ответы (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);
}
person haim770    schedule 14.11.2013
comment
Это работает, только если OutputCacheLocation.None или OutputCacheLocation.Server или NoStore = true, по крайней мере, в MVC 5 - person LostInComputer; 14.11.2013
comment
@LostInComputer, читая текст OP the previous cached response is sent to the spider, очевидно, что он использует OutputCacheLocation.Server. - person haim770; 14.11.2013
comment
Я, возможно, неправильно понял проблему. Я думал, что он хотел отключить кеширование сервера и удалить кеширование клиента, если запросчик является поисковым роботом. - person LostInComputer; 14.11.2013