0

我添加到清漆配置

sub vcl_fetch {

   set beresp.do_esi = true; 

}

}

在我的 mvc 应用程序中,我有一个 childaction

<div>@* this should not be cached, I change the returned value in my DB *@
        1 @Html.Action("GetHour", "Index", new { id = 5 })
    </div>

    <div>
        2
        <esi:include>@* this should be cached *@
            @Html.Action("GetHour", "Index", new { id = 5 })
        </esi:include>
    </div>

并添加了一个请求头

Request.Headers.Add("X-Esi", "1");

但是 Varnish 一直在缓存整个页面。

我想念什么?我在浏览器中注意到请求标头 X-Esi 不存在。还清漆正确删除标签<esi:include

GetHour 中的代码非常简单,只需从 SQL Server 中检索一个小数。

4

1 回答 1

1

改变这个:

<esi:include>@* this should be cached *@
        @Html.Action("GetHour", "Index", new { id = 5 })
    </esi:include>

为了这:

<esi:include src="/Index/GetHour/5">
          </esi:include>

并添加到 Varnish default.vcl:

sub vcl_fetch {
   set beresp.do_esi = true;

  if(bereq.url ~ "/Index/GetHour"){
    set beresp.ttl = 0s;
  }
}

@ronald 在上面的评论中部分回答了这个问题。还必须删除 [ChildActionOnly] 注释。

于 2015-08-27T15:03:27.160 回答