Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET Web API CacheControl

I am trying to implement CacheControl headers from within a ASP.NET Web Api action ( I realise I can do this using other libraries, and in filters/handlers, but want to do some testing first).

I am following a trivial example from a book that looks like:

var response = Request.CreateResponse<IEnumerable<string>>(HttpStatusCode.OK,emails);

response.Headers.CacheControl = new CacheControlHeaderValue();
response.Headers.CacheControl.MaxAge = TimeSpan.FromHours(1);
response.Headers.CacheControl.MustRevalidate = false;
response.Headers.CacheControl.Public = true;

return response;

This code is almost identical to a number of other answers provided on stackoverflow.

However, the web api is not setting cache control header at all! Any ideas?????

When I look at the response in fiddler it looks like the following, as you can the cache-control is set to no-cache.

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-MiniProfiler-Ids: ["b7bfde10-e8d3-455d-b40d-2f33eb285023"]
X-Powered-By: ASP.NET
Date: Sat, 25 May 2013 11:54:35 GMT
Content-Length: 24

I have tried changing the maxage, mustrevalidate and public values all to no avail...

like image 352
just part of the crowd Avatar asked May 25 '13 12:05

just part of the crowd


1 Answers

Check your request pipeline to see if you have something that is manipulating your response via the System.Web.HttpResponse object (ex: HttpContext.Current.Response). I've run into cases where adding http cookies via System.Web.HttpResponse will wipe out any cache-control headers defined within Web API's System.Net.Http.HttpResponseMessage.

Try avoiding System.Web.HttpResponse. If that's not possible, one workaround as discussed here would be to manually set the cookie header via AddHeader() and avoid the Cookies collection altogether.

like image 85
Ryan Tofteland Avatar answered Oct 10 '22 21:10

Ryan Tofteland