2015-08-25 72 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]註釋。