【问题标题】:Sitecore and caching controlSitecore 和缓存控制
【发布时间】:2014-06-27 06:53:18
【问题描述】:

我正在处理这个 Sitecore 项目,并且正在使用 WebApi 执行一些服务调用。我的方法用 CacheOutput 信息装饰,如下所示:

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

我正在使用 Google Chrome 上的 DHC 应用程序测试这些呼叫。我确信 ClientTimespan 设置正确,但我得到的响应标头不是我所期望的。我希望 Cache-Control 的 max-age 由 ClientTimespan 属性设置为 1 小时,但它设置为私有。

我一直在调试所有可能的东西,结果发现 Sitecore 可能正在拦截响应并将此标头值设置为私有。我还将服务 url 添加到 sitecore 忽略的 url 前缀配置但没有帮助。

有人知道如何让 Sitecore 不更改我的 Cache-Control 标头吗?

【问题讨论】:

    标签: asp.net-web-api sitecore cache-control outputcache sitecore7


    【解决方案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)] 属性添加到您的方法中。
    代码来自:Setting HTTP cache control headers in WebAPI(答案#2)

    或者您可以在整个应用程序中全局应用它,如下所述:http://juristr.com/blog/2012/10/output-caching-in-aspnet-mvc/

    【讨论】:

    • 好吧,我的做法完全一样。并且 max-age 设置正确。我可以在调试中看到它,但是当响应到来时它仍然设置为私有。我不得不说我没有使用 MVC,但我不确定这是否会以任何方式影响它。
    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2014-08-31
    • 2020-09-22
    • 2012-06-06
    • 2016-09-07
    相关资源
    最近更新 更多