asp.net mvc浏览器缓存和压缩的实现

cache在开发高可扩展性的web应用中起着至关重要的作用,我们可以按照预定的时间将任何get请求缓存到浏览器中,如果在预定的时间内用户请求同一URL那么response就会通过浏览器的cache来实现而非server。可以通过下面的action filter在ASP.NET MVC应用中实现同样的功能:

using System;

using System.Web;

using System.Web.Mvc;

 

public class CacheFilterAttribute: ActionFilterAttribute

{

        /// <summary>

       /// Get or sets the cache duration in seconds . the default is 10 seconds

       /// </summary>

       /// <value> the cache duration in seconds </value>

    

      public int Duration

      {

              get;

              set;

      }

      public CacheFilterAttribute()

      {

              Duration = 10;

       }

       public override void OnActionExecuted(FiterExecutedContext filterContext)

       {

              if (Duration <= 0) return;

             

              HttpCachePolicy cache = fiterContext.HttpContext.Response.Cache;

              TimeSpan cacheDuration = TimeSpan.FromSeconds(Duration);

             

              cache.SetCacheability(Httpcacheablity.public);

              cache.SetExpires(DateTime.Now.Add(cacheDuration);

              cache.SetMaxAge(cacheDuration);

              cache.AppendCacheExtension("must revalidate, proxy-revalidate");

        }

}

可以在controller action method中应用这个filter:

[CacheFilter(Duration = 60)]

public void Category(string name, int? page)

{

     

}

提升web 应用性能的另外一个重要因素便是压缩,目前大多数的浏览器都接受压缩过的内容,这样就大大节省了带宽。可以通过下面的filter在ASP.NET WEB应用中压缩你的response:

using System.Web;

using System.Web.Mvc;

 

public class CompressFilter : ActionFilterAttribute

{

       public override OnActionExecuting(FilterExecutingContext filterContext)

      {

                HttpRequestBase request = filterContext.HttpContext.Request;

                string acceptEncoding = request.Headers("Accept-Encoding");

               

                if (string.IsNullOrEmpty(acceptEncoding)) return;

               

                acceptEncoding = acceptEncoding.ToUpperInvariant();

               

                HttpResponseBase response = filterContext.HttpContext.Response;

               

                if (acceptEncoding.Contains("GZIP"))

                {

                       reponse.AppendHeader("Content-encoding","gzip");

                       response.Filter = new GZipStream(response.Filter,CompressionMode.Compress);

                }

       }

}

可以在Controller action method中应用这个filter:

[CompressFilter]

public void Category(string name, int? page)

{

     

}

当然也可以两个filter一块儿使用:

 

[CompressFilter]

[CacheFilter(Duration = 60,Order = 2)]

public void Category(string name, int? page)

{

     

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值