ASP.NET Web API 缓存控制

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中查看响应时,它看起来像下面这样,你可以看到缓存控制设置为no-cache。
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的值,但都无济于事...


1
我刚刚检查了你的响应代码...对我来说是有效的。看起来问题出在其他地方...可能是你的解决方案中的某个AOP过滤器、属性等。 - Radim Köhler
1
我同意Radim的看法,你的代码很好。你安装了任何MessageHandlers吗? - Darrel Miller
1
你有没有找到这个不起作用的原因?我也遇到了同样的问题,试图将WebAPI集成到一个传统的MVC项目中。 - Chad
1
我有同样的问题,在API操作中使用[EnableCors(origins: "", headers: "", methods: "*")]头信息。不知道这是否会导致问题。 - gbro3n
1个回答

3
检查您的请求管道,看看是否有通过System.Web.HttpResponse对象(例如:HttpContext.Current.Response)操纵响应的内容。我曾经遇到过这样的情况:通过System.Web.HttpResponse添加http cookie会清除Web API的System.Net.Http.HttpResponseMessage定义的任何缓存控制标头。
尽量避免使用System.Web.HttpResponse。如果不可能,请参考此处讨论的一个解决方法,即通过AddHeader()手动设置cookie头,完全避免使用Cookies集合。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接