我有一个返回JSON的WCF Web服务。
我希望浏览器能够缓存响应,但是浏览器仍在向服务器生成"If-Modified-Since"调用,并使用"304 Not Modified"进行重播。我希望浏览器能够缓存并使用响应,而不是每次都向服务器发出"If-Modified-Since"调用。
我注意到,即使我在代码中指定了"Cache-Control "max-age=604800"",WCF发送的响应头也是"Cache-Control no-cache,max-age=604800"。为什么WCF添加了"no-cache"部分,如何阻止它添加?
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
Stream GetStuff(int arg);
我正在使用这种方法将一个对象图转换为JSON:
private static Stream ToJson(object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(obj);
if (WebOperationContext.Current != null)
{
OutgoingWebResponseContext outgoingResponse = WebOperationContext.Current.OutgoingResponse;
outgoingResponse.ContentType = "application/json; charset=utf-8";
outgoingResponse.Headers.Add(HttpResponseHeader.CacheControl, "max-age=604800"); // one week
outgoingResponse.LastModified = DateTime.Now;
}
return new MemoryStream(Encoding.UTF8.GetBytes(json));
}
我希望浏览器能够缓存响应,但是浏览器仍在向服务器生成"If-Modified-Since"调用,并使用"304 Not Modified"进行重播。我希望浏览器能够缓存并使用响应,而不是每次都向服务器发出"If-Modified-Since"调用。
我注意到,即使我在代码中指定了"Cache-Control "max-age=604800"",WCF发送的响应头也是"Cache-Control no-cache,max-age=604800"。为什么WCF添加了"no-cache"部分,如何阻止它添加?