是否可以在 Web API 的 MediaTypeFormatter 内设置过期/缓存 header ?我尝试覆盖 SetDefaultContentHeaders 并设置 expires header ,如下所示:
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 工具这样的网络调试器中查看它时, expires header 总是返回 -1 。似乎也无法在此处设置 CacheControl header ,因为它是响应 header 而不是内容 header (无论这意味着什么)。
最佳答案
似乎是 HttpResponseMessage.Headers.CacheControl
的任何设置导致 Expires header 按设置发出,但未设置 Expires 发出的值为 -1。尝试设置 response.Headers.CacheControl = new CacheControlHeaderValue()
但没有设置最大年龄。您应该可以在任何暴露 HttpResponseMessage
的地方执行此操作;例如在 ApiController
或 DelegatingHandler
.
根据 RFC2616 , 如果 CacheControl 的 max-age 存在,它会覆盖 Expires,但如果你只是将它设置为上面它应该可以工作。
这是否是一个好主意值得商榷,因为 Expires 是 HTTP 1.0,而 CacheControl 是 HTTP 1.1。
关于asp.net - 在 Web API 格式化程序中设置过期/缓存 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770202/