我在ASP.NET 4.5上使用ServiceStack。我在ServiceStack InMemory缓存方面遇到了麻烦。如果我直接从浏览器调用URL,它会撤回缓存版本,但如果我尝试通过JQuery中的getJSON调用它,它永远不会撤回缓存版本,只是每次都重新获取数据。
这是基本代码位......
public class AResponse : IHasResponseStatus
{
public ResponseStatus ResponseStatus { get; set; }
public Html Html { get; set; }
}
public object Get(A request)
{
var cacheKey = UrnId.Create<string>(request.UserKey + request.Id);
var expireInTimespan = new TimeSpan(1, 0, 0);
return RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey, expireInTimespan, () =>
{
var ar = new AResponse();
var html = new Html();
html.Test = "test";
ar.Html = html;
return ar;
});
}
...感谢您的任何想法。
答案 0 :(得分:1)
我的理解是,当您从浏览器调用服务时,您将缓存一个Html版本。因此,ServiceStack将通过在您的密钥上应用.html后缀来插入/检索。当你从JQuery调用它时,它将缓存一个Json版本并在你的密钥上应用.json后缀。您可以使用网址上的?format=json
从浏览器调用您的服务来测试此问题。这将缓存一个json版本(而不是html),然后从JQuery调用以获取缓存的json。