有没有办法从静态方法访问缓存或会话?

Posted

技术标签:

【中文标题】有没有办法从静态方法访问缓存或会话?【英文标题】:Is there a way to access a cache or session from a static method? 【发布时间】:2010-09-27 23:21:07 【问题描述】:

如何通过 jQuery ajax 调用访问缓存?

我正在使用 jquery 进行一些数据验证和快速数据访问。我有一个静态网络方法,jquery 通过 json 调用它来返回一个值。我不想每次都调用数据库,所以我想缓存我正在访问的数据,但我无法确定如何从 javascript 或静态方法中调用 asp.net 缓存。

我想将页面对象发送到静态方法,这将允许我访问 page.cache,但不知道如何。除此之外,也许是一种从 javascript 本身访问缓存的方法?

【问题讨论】:

【参考方案1】:

System.Web.HttpContext.Current.Cache

缓存是按应用程序域共享的,而不是按页面共享的。页面只有一个convenience property of Page.Cache 来获取当前的缓存,这意味着你可以在页面中的方法中执行 Cache["key"]。

正如您所注意到的,如果您使用的是静态方法,那么您就没有 Page 实例,也没有 Page.Cache 属性。所以,你需要使用HttpContext.Cache。但是,等等 - 你也没有 HttpContext 实例!没关系,当前执行的实例存放在HttpContext.Current的静态属性中。

所以 - 回答您的问题 - 在静态方法中,使用 HttpContext.Current.Cache。顺便说一句,您还可以从那里访问 Request 和 Response 属性。

【讨论】:

你是我的救星!这正是我想知道的。我知道必须有一种方法可以到达缓存,但不知道如何。非常感谢!【参考方案2】:

如果你真的想这样做,我认为调用 PageMethod 可能是你能做的最好的事情:

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

【讨论】:

【参考方案3】:

Javascript 是客户端,缓存在服务器端,所以你需要回调你的 asp.net 应用程序中的一个方法,它会返回缓存的内容。

ASP.NET Cache API 真的很不错,你可以使用 Cache["Key"] 来获取你喜欢的缓存内容。在这里阅读更多:http://msdn.microsoft.com/en-us/library/ms972379.aspx

【讨论】:

以上是关于有没有办法从静态方法访问缓存或会话?的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp3.2中开启静态缓存后对404页面的处理方法

静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

方法的声明和调用——java

从静态上下文访问非静态方法

受保护的静态方法访问

缓存 SmartGWT 应用程序的静态内容