我已经问this question over on programmers与此相关联。我正在尝试找到一个不太可能被剥离的合适标头,我可以用它来回复每个响应的唯一请求ID,即使它没有发送正文。
我考虑的其中一个标题是Pragma
标题,因为查看规范似乎不仅仅是为了额外的no-cache
HTTP 1.0向后兼容性值,而且还用于应用程序 - 具体的值,所以我应该能够使用它。例如,应该可以发送类似no-cache; requestid=id
的内容。
所以在DelegatingHandler
我尝试用我的ID写信给它:
//HttpResponseMessage Response;
Response.Headers.Add("pragma", "some_value");
但它以no-cache
到达客户端;总是。我认为WebAPI会自动发送与缓存关闭一致的缓存标头,其中包括Pragma
缓存。
那么,我如何确保我的价值得到维持而不被覆盖?
答案 0 :(得分:2)
我已经破解了它,答案是确保你还在HttpResponseMessage上设置CacheControl
标头,然后绕过System.Web.Http.WebHost.HttpControllerHandler
中的一些略微可疑逻辑( I've opened a discussion on CodePlex about this;我认为逻辑需要改变。)
所以而不是
//HttpResponseMessage Response;
Response.Headers.Add("pragma", "some_value");
你必须这样做:
Response.Headers.CacheControl =
new System.Net.Http.Headers.CacheControlHeaderValue()
{
NoCache = true
};
Response.Headers.Add("pragma", "some_value");
(我使用过NoCache,因为当前的API默认是为所有响应切换缓存)。