【发布时间】:2009-05-28 18:31:33
【问题描述】:
是否有内置的 asp.net 方式来有条件地提供页面,例如我想要以下逻辑:
如果有我生成的会话数据 一个页面,如果没有会话数据我 提供缓存页面。
我只对了解用于此的内置 asp.net 机制感兴趣。如果它不存在,我可能会简单地手动缓存我的页面,并根据会话数据的可用性决定是否为每个请求提供它。
【问题讨论】:
是否有内置的 asp.net 方式来有条件地提供页面,例如我想要以下逻辑:
如果有我生成的会话数据 一个页面,如果没有会话数据我 提供缓存页面。
我只对了解用于此的内置 asp.net 机制感兴趣。如果它不存在,我可能会简单地手动缓存我的页面,并根据会话数据的可用性决定是否为每个请求提供它。
【问题讨论】:
我认为没有内置支持(如varyByParam)为具有会话数据的用户生成新的输出。
正如您所建议的,我建议手动缓存页面。我可能会在Global.asax 中的PreRequestHandlerExecute 事件处理程序中确定用户的会话状态,然后可能会设置:
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
【讨论】:
冒着karmabombing的风险,我真的不喜欢这种缓存方法。
对我来说,如果发出 GET 请求,那么服务器应该真诚地响应它。页面级别的缓存应该由 http 标头控制,因为主要目标是不获取冗余请求根本 - 您不想完全停止分配服务器/带宽资源。
缓存对象是构成页面所涉及的资源,我完全可以落后,但我看不到批量缓存页面的好论据。
尊重标题。
【讨论】:
您可能想查看 .NET 2.0 中的新替换控件 (http://geekswithblogs.net/ranganh/archive/2005/05/04/39003.aspx),但它可能不完全符合您的要求。
【讨论】: