Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting Expires/Caching headers in a Web API Formatter

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).

like image 833
Ely Avatar asked Dec 27 '22 06:12

Ely


1 Answers

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.

like image 57
sellotape Avatar answered Dec 28 '22 19:12

sellotape