【发布时间】:2011-06-08 12:00:59
【问题描述】:
我有一个返回 JSON 的 WCF Web 服务。
[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”部分,如何阻止它添加?
【问题讨论】: