加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

Asp.net全局输出缓存

发布时间:2020-12-16 07:40:01 所属栏目:asp.Net 来源:网络整理
导读:最近几天我想到了asp.net中的输出缓存.在我的任务中,我需要为这个非常大的项目实现输出缓存.经过几个小时的搜索,我没有找到任何例子. 最流行的使用输出缓存的方式是声明性的,在这种情况下,您需要在要缓存的页面上编写类似这样的内容. 但是,如果您需要缓存整
最近几天我想到了asp.net中的输出缓存.在我的任务中,我需要为这个非常大的项目实现输出缓存.经过几个小时的搜索,我没有找到任何例子.

最流行的使用输出缓存的方式是声明性的,在这种情况下,您需要在要缓存的页面上编写类似这样的内容.

但是,如果您需要缓存整个站点,则必须在项目的所有页面或母版页上编写此文件.这很疯狂.在这种情况下,您无法将所有配置存储在一个位置.所有页面都有自己的配置..

Global.asax可以帮助我,但我的网站包含大约20个web progects和~20个global.asax文件.而且我不想为每个项目复制相同的代码.

出于这些原因,我决定创建HTTPModule.
在Init方法中,我订阅了两个事件:

public void Init(HttpApplication app)
{
  app.PreRequestHandlerExecute += new EventHandler(OnApplicationPreRequestHandlerExecute);
  app.PostRequestHandlerExecute += new EventHandler(OnPostRequestHandlerExecute);
}

在方法“OnPostRequestHandlerExecute”中,我为每个新请求设置输出缓存参数:

public void OnPostRequestHandlerExecute(object sender,EventArgs e)
{
  HttpApplication app = (HttpApplication)sender; 
  HttpCachePolicy policy = app.Response.Cache;
  policy.SetCacheability(HttpCacheability.Server);
  policy.SetExpires(app.Context.Timestamp.AddSeconds((double)600));
  policy.SetMaxAge(new TimeSpan(0,600));
  policy.SetValidUntilExpires(true);
  policy.SetLastModified(app.Context.Timestamp);
  policy.VaryByParams.IgnoreParams = true; 
}

在“OnApplicationPreRequestHandlerExecute”方法中,我将calback方法设置为缓存验证:

public void OnApplicationPreRequestHandlerExecute(object sender,EventArgs e)
{
  HttpApplication app = (HttpApplication)sender;
  app.Context.Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(Validate),app);
}

最后一部分 – 回调验证方法:

public void Validate(HttpContext context,Object data,ref HttpValidationStatus status)
{
  if (context.Request.QueryString["id"] == "5")
  {
      status = HttpValidationStatus.IgnoreThisRequest;
      context.Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(Validate),"somecustomdata");
  }
  else
  {
      status = HttpValidationStatus.Valid;
  }
}

要附加我的HttpModule,我使用编程方式附加方法:

[assembly: PreApplicationStartMethod(typeof(OutputCacheModule),"RegisterModule")]

这种方法很有效,但我想知道还有其他方法可以做到这一点.
谢谢.

解决方法

尝试查看IIS缓存是否提供了所需的内容.

http://www.iis.net/configreference/system.webserver/caching

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读