【问题标题】:Conditionally add OutputCache Directive有条件地添加 OutputCache 指令
【发布时间】:2011-12-15 17:28:41
【问题描述】:

我在我的 aspx 页面中使用了 OutputCache 指令。我想根据环境添加或删除它。例如,有生产环境的指令,但没有开发环境的指令。

页面上的 if 语句似乎不起作用:

<% if (someCondition) { %>
  <%@ OutputCache Location="Any" Duration="1800" VaryByParam="None" %>
<% } %>

有没有办法在后面的代码中删除(或添加)指令?完成此任务的最佳方法是什么?

【问题讨论】:

  • 为什么说它不起作用?描述你得到的错误
  • 你试过HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);

标签: c# asp.net caching


【解决方案1】:

每个 OutputCache 属性都可以通过编程方式处理,如下所示:How to cache in ASP.NET by using Visual C# .NET

有没有办法在后面的代码中删除(或添加)指令?

到目前为止我没有看到,但不排除这种可能性。不过,您不必这样做,因为您可以使用 Response.Cache 来处理您的场景,这让您可以玩整个十码。

虽然如果您使用的是 ASP.NET MVC,那么您可以将其用作属性,如下所示: OutputCacheAttribute Class ([OutputCache(CacheProfile = "MyProfile", Duration = 10)])。 还有一个stackoverflow示例here。

最好的方法是什么?

使用 Response.Cache。检查下面的代码。

using System.Web;

//......
//......
//......

if (someCondition) 
{
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public); //Location="Any"
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddSeconds(1800)); //Duration="1800"
HttpContext.Current.Response.Cache.SetValidUntilExpires(true); 
}

【讨论】:

  • 太好了,谢谢!不使用 ASP.NET MVC,但感谢您提供的额外信息。
  • 这不是一个正确的答案,因为显示的调用只是在响应中设置标题,即告诉浏览器如何实现客户端缓存。这与 OutputCache 指令公开的所有功能都不匹配;例如,使用 HttpContext.Current.Response.Cache,无法以编程方式设置服务器端缓存的持续时间。
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 2016-09-26
  • 2018-11-16
  • 2023-04-05
  • 2019-07-02
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
相关资源
最近更新 更多