1

我已经向与此相关的程序员提出了这个问题。我正在尝试找到一个合适的标头,该标头不太可能被剥离,即使它不发送正文,我也可以使用它为每个响应发送回一个唯一的请求 ID。

我考虑的标头之一是标Pragma头,从规范来看,它似乎不仅适用于额外的no-cacheHTTP 1.0 向后兼容值,还适用于特定于应用程序的值,因此我应该能够使用它。例如,应该可以发送类似no-cache; requestid=id.

因此,DelegatingHandler我尝试用我的 ID 写信给它:

//HttpResponseMessage Response; 
Response.Headers.Add("pragma", "some_value"); 

但它到达客户端时no-cache; 总是。我认为 WebAPI 会自动发送与缓存关闭一致的缓存标头,其中包括Pragma一个。

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

4

1 回答 1

2

我已经破解了,答案是确保您还在CacheControlHttpResponseMessage 上设置了标头,然后绕过了一些稍微可疑的逻辑System.Web.Http.WebHost.HttpControllerHandler我已经在 CodePlex 上对此进行了讨论;我认为需要更改逻辑) .

所以而不是

//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 默认是关闭所有响应的缓存)。

于 2012-07-26T08:38:22.603 回答