I’ve asked this question over on programmers that’s linked to this one. I’m trying to find a suitable header, that is unlikely to be stripped, that I can use to send back a unique Request ID with every response, even if it does not send a body.
One of the headers I considered was the Pragma header, as looking at the spec it appears to be intended not only for the additional no-cache HTTP 1.0 backwards-compatibility value, but also for application-specific values, so I should be able to use it. It should be possible, for example, to send something like no-cache; requestid=id.
So in a DelegatingHandler I tried writing to it with my ID:
//HttpResponseMessage Response;
Response.Headers.Add("pragma", "some_value");
But it arrives at the client with no-cache; always. I think WebAPI automatically sends caching headers consistent with caching being switched off, which includes the Pragma one.
So, how do I make sure my value is maintained and not overwritten?
I’ve cracked it, the answer is to make sure you also set the
CacheControlheader on the HttpResponseMessage, which then bypasses some slightly fishy logic inSystem.Web.Http.WebHost.HttpControllerHandler(I’ve opened a discussion on CodePlex about this; I think the logic needs to be changed).So instead of
You have to do:
(I’ve used NoCache since the current API default is to switch caching off for all responses).