Sitecore и управление кэшированием

Я работаю над этим проектом Sitecore и использую WebApi для выполнения некоторых сервисных вызовов. Мои методы украшены информацией CacheOutput следующим образом:

[HttpGet]
[CacheOutput(ClientTimeSpan = 3600, ServerTimeSpan = 3600)]

Я тестирую эти вызовы с помощью приложения DHC в Google Chrome. Я уверен, что ClientTimespan установлен правильно, но заголовки ответов, которые я получаю, не соответствуют моим ожиданиям. Я ожидаю, что Cache-Control будет иметь максимальный возраст 1 час, установленный атрибутом ClientTimespan, но вместо этого он установлен как частный.

введите здесь описание изображения

Я отлаживал все, что только можно, и оказалось, что Sitecore может перехватывать ответ и устанавливать для этого заголовка значение private. Я также добавил URL-адрес службы в конфигурацию игнорируемых префиксов URL-адресов sitecore, но это не помогло.

Кто-нибудь знает, как заставить Sitecore НЕ изменять заголовки Cache-Control?


person alinulms    schedule 27.06.2014    source источник


Ответы (1)


Это поведение MVC по умолчанию и не имеет прямого отношения к Sitecore/Web API.
Вы можете создать собственный атрибут, который задает заголовок Cache-Control:

public class CacheControl : System.Web.Http.Filters.ActionFilterAttribute
{
    public int MaxAge { get; set; }

    public CacheControl()
    {
        MaxAge = 3600;
    }

    public override void OnActionExecuted(HttpActionExecutedContext context)
    {
        context.Response.Headers.CacheControl = new CacheControlHeaderValue()
        {
            Public = true,
            MaxAge = TimeSpan.FromSeconds(MaxAge)
        };

        base.OnActionExecuted(context);
    }
}

Это позволяет добавить атрибут [CacheControl(MaxAge = n)] к вашим методам.
Код взят из: Настройка заголовков управления кешем HTTP в WebAPI (ответ №2)

Или вы можете применить его глобально во всем приложении, как описано здесь: http://juristr.com/blog/2012/10/output-caching-in-aspnet-mvc/

person Ruud van Falier    schedule 27.06.2014
comment
Ну я точно так же делаю. И максимальный возраст установлен правильно. Я вижу это в отладке, но затем, когда приходит ответ, он по-прежнему установлен как частный. Должен сказать, что я не использую MVC, но не уверен, что это как-то влияет на него. - person alinulms; 27.06.2014