Is is possible to set the expiration/caching headers inside of a MediaTypeFormatter in Web API? I have tried overriding the SetDefaultContentHeaders and setting the expires header like so:
public override void SetDefaultContentHeaders(Type type, System.Net.Http.Headers.HttpContentHeaders headers, System.Net.Http.Headers.MediaTypeHeaderValue mediaType)
{
headers.Expires = DateTime.Now.AddHours(24);
}
But the expires header always comes back with -1 when viewing it in a web debugger like the Chrome tools. It also doesn't appear that setting the CacheControl header is not possible here as that is a response header and not a content header (whatever that means).
Seems any setting of HttpResponseMessage.Headers.CacheControl
causes the Expires header to be emitted as set, but without it set Expires is emitted with a value of -1. Try setting response.Headers.CacheControl = new CacheControlHeaderValue()
but without setting max-age. You should be able to do this anywhere that exposes HttpResponseMessage
; e.g. in the ApiController
or a DelegatingHandler
.
As per RFC2616, if CacheControl's max-age is present, it overrides Expires, but if you just set it as above it should work.
Whether or not this is a good idea is debatable, as Expires is HTTP 1.0, while CacheControl is HTTP 1.1.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With