7

我正在尝试从 ASP.NET Web Api 操作中实现 CacheControl 标头(我意识到我可以使用其他库和过滤器/处理程序来执行此操作,但想先进行一些测试)。

我正在关注一本书中的一个简单示例,如下所示:

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;

此代码几乎与 stackoverflow 上提供的许多其他答案相同。

但是,web api 根本没有设置缓存控制头!有任何想法吗?????

当我查看 fiddler 中的响应时,它看起来如下所示,因为您可以将缓存控制设置为无缓存。

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

我尝试更改 maxage、mustrevalidate 和 public 值都无济于事......

4

1 回答 1

3

检查您的请求管道,看看您是否有通过System.Web.HttpResponse对象操纵您的响应的东西(例如:)HttpContext.Current.Response。我遇到过通过添加 http cookieSystem.Web.HttpResponse将清除 Web API 中定义的任何缓存控制标头的情况System.Net.Http.HttpResponseMessage

尽量避免System.Web.HttpResponse。如果这不可能,这里讨论的一种解决方法是手动设置 cookie 标头 viaAddHeader()并完全避免Cookies收集。

于 2015-05-22T18:21:25.310 回答