2015-08-25 93 views
0

我加入清漆配置如何用c#mvc和Varnish做甜甜圈缓存?

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"); 

但光油保持缓存整个页面。

我错过了什么? 我在浏览器中注意到请求标头X-Esi不存在。 也清漆正确删除标记<esi:include

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

+0

我不认为你可以将内容放在esi:include标签中,并期望它被缓存。您需要在esi:include标记上指定src属性: Ronald

+0

如果您不希望缓存页面,则应指定具有max-age的缓存控制标头或者s-maxage为0来告诉清漆不要缓存 – Ronald

+0

你是对的。更改为 并将ttl配置为0并且可以工作。谢谢。 –

回答

0

更改此:

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

此:

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

,并加入到光油default.vcl:

sub vcl_fetch { 
    set beresp.do_esi = true; 

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

这部分被@ronald在上述评论的回答。 也必须删除[ChildActionOnly]注释。