2015-08-25 4 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 и ожидать, что это будет кешировано. Вам нужно указать атрибут src в теге esi: include: Ronald

+0

Если вы не хотите, чтобы страница была кэширована, вы должны указать заголовок Cache-Control с максимальным возрастом или 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> 

И добавить к Varnish default.vcl:

sub vcl_fetch { 
    set beresp.do_esi = true; 

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

Это частично отвечает @ronald в комментариях выше. Пришлось также удалить аннотацию [ChildActionOnly].