zoukankan      html  css  js  c++  java
  • ASP.NET MVC3 Web应用程序中启用GZip压缩示例

    http://www.mzwu.com/article.asp?id=3284

    自定义一个筛选器,继承于GZipAttribute:

    using System;
    using System.IO.Compression;
    using System.Web.Mvc;

    namespace MvcApplication1
    {
        public class GZipAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext context)
            {
                var acceptEncoding = context.HttpContext.Request.Headers["Accept-Encoding"];
                if (!string.IsNullOrEmpty(acceptEncoding))
                {
                    acceptEncoding = acceptEncoding.ToLower();
                    var response = context.HttpContext.Response;
                    if (acceptEncoding.Contains("gzip"))
                    {
                        response.AppendHeader("Content-Encoding", "gzip");
                        response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
                    }
                    else if (acceptEncoding.Contains("deflate"))
                    {
                        response.AppendHeader("Content-Encoding", "deflate");
                        response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
                    }
                }
            }
        }
    }

    方法一:在需要GZip的Action上使用GZipAttribute

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;

    namespace MvcApplication1.Controllers
    {
        public class HomeController : Controller
        {
            [GZip]
            public ActionResult Index()
            {
                ViewBag.Message = "欢迎使用 ASP.NET MVC!";

                return View();
            }

            public ActionResult About()
            {
                return View();
            }
        }
    }

    方法二:使用全局过滤器(MVC3+支持)

    Global.asax.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;

    namespace MvcApplication1
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                filters.Add(new GZipAttribute());
            }

            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

                routes.MapRoute(
                    "Default", // 路由名称
                    "{controller}/{action}/{id}", // 带有参数的 URL
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
                );

            }

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();

                RegisterGlobalFilters(GlobalFilters.Filters);
                RegisterRoutes(RouteTable.Routes);
            }
        }
    }

  • 相关阅读:
    设计模式-单件模式 实现
    设计模式-观察者模式 实现
    设计模式-策略模式 实现
    笔记- 设计模式:设计原则
    EventBus 发布/订阅 机制的 java 实现
    webService 客户端 以wsimport方式生成对应java文件
    【安装mysql】windows安装压缩版mysql5.7.15
    eclipse插件开发入门
    Java程序开发.邱加永2.1节
    Mysql常用表操作 | 单表查询
  • 原文地址:https://www.cnblogs.com/BluceLee/p/4062556.html
Copyright © 2011-2022 走看看