gpt4 book ai didi

c# - WCF REST JSON 服务缓存

转载 作者:可可西里 更新时间:2023-11-01 15:29:20 25 4
gpt4 key购买 nike

我有一个返回 JSON 的 WCF 网络服务。

[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-Since304 Not Modified 重播对服务器的调用.我希望浏览器在不生成 If-Modified-Since 的情况下缓存和使用响应每次调用服务器。

我注意到,即使我指定了 Cache-Control "max-age=604800"代码中WCF发送的响应头是Cache-Control no-cache,max-age=604800 .为什么 WCF 添加“无缓存”部分以及如何阻止它添加?

最佳答案

尝试将 Cache-Control 设置为“public,max-age=...”。这可能会阻止 WCF 应用默认缓存策略 header 。

此外,还有所谓的“远期到期 header ”。对于繁重的长期缓存,我使用 Expires header 而不是 Cache-Control:'max-age=...' 并将 Cache-Control 保留为“public”。

关于c# - WCF REST JSON 服务缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com