4

是否可以在 Web API 的 MediaTypeFormatter 内设置过期/缓存标头?我尝试覆盖 SetDefaultContentHeaders 并设置 expires 标头,如下所示:

public override void SetDefaultContentHeaders(Type type, System.Net.Http.Headers.HttpContentHeaders headers, System.Net.Http.Headers.MediaTypeHeaderValue mediaType)
    {            
       headers.Expires = DateTime.Now.AddHours(24);            
    }

但是,当在 Chrome 工具等 Web 调试器中查看时,过期标头总是返回 -1。似乎也无法在此处设置 CacheControl 标头,因为这是响应标头而不是内容标头(无论这意味着什么)。

4

2 回答 2

10

似乎任何设置HttpResponseMessage.Headers.CacheControl都会导致 Expires 标头按设置发出,但没有它设置 Expires 发出的值为 -1。尝试设置response.Headers.CacheControl = new CacheControlHeaderValue()不设置 max-age。您应该能够在任何暴露的地​​方执行此操作HttpResponseMessage;例如在ApiController或 中DelegatingHandler

根据RFC2616,如果 CacheControl 的 max-age 存在,它会覆盖 Expires,但如果您只是按上述方式设置它,它应该可以工作。

这是否是一个好主意值得商榷,因为 Expires 是 HTTP 1.0,而 CacheControl 是 HTTP 1.1。

于 2013-05-15T11:16:10.257 回答
0

您应该在定义过期时间的输出 HttpResponse 对象中设置相应的缓存控制标头。不幸的是,WebAPI 没有开箱即用的内置支持,但幸运的是实现起来并不难。举个例子看看这里:http ://blog.turlov.com/2013/11/setting-cache-control-http-headers-in.html

于 2014-07-24T16:07:14.763 回答