如果请求来自蜘蛛,ASP.NET MVC会阻止OutputCache

时间:2013-11-14 05:50:43

标签: asp.net-mvc outputcache action-filter

如果我收到Spider的请求,我会启动Phantom JS进程并回放动态HTML。 (使用OnExecuting过滤器并设置ActionResult)

但是OutputCache过滤器也适用于这个方法,它正在阻碍它!。

E.G:

步骤1.使用普通用户代理加载页面。 (输出缓存缓存URL) 步骤2.使用spider用户代理加载页面。 (之前的缓存响应被发送到蜘蛛,我的Phantom JS过滤器永远不会运行)

1 个答案:

答案 0 :(得分: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);
}