在Asp.Net Web API中的DelegatingHandler中编写Pragma标头

时间:2012-07-25 22:18:51

标签: rest asp.net-web-api

我已经问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缓存。

那么,我如何确保我的价值得到维持而不被覆盖?

1 个答案:

答案 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默认是为所有响应切换缓存)。