asp.net-mvc - 如何在 asp.net MVC 中压缩内容?

标签 asp.net-mvc asp.net-mvc-2 gzip

如何压缩 asp.net mvc 应用程序发送的输出?

最佳答案

这是我使用的(截至目前):

using  System.IO.Compression;

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}

Controller 中的用法:

[Compress]
public class BookingController : BaseController
{...}

还有其他变体,但是这个效果很好。 (顺便说一句,我在 BaseController 上使用 [压缩] 属性来节省整个项目的重复,而上面是在逐个 Controller 的基础上进行的。

[编辑] 如上段所述。为了简化使用,您还可以在 BaseController 本身中包含 [Compress] oneshot,这样每个继承的子 Controller 都会默认访问该功能:

[Compress]
public class BaseController : Controller
{...}

关于asp.net-mvc - 如何在 asp.net MVC 中压缩内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3802107/

相关文章:

java - 在 jre 中更新 gzip 库

ruby - 仅在内存中创建 gzip

.net - Global.asax 和 Error.aspx 中的 ASP.NET MVC 错误日志记录

asp.net-mvc - Django 中的 Asp.Net MVC 样式路由

embedded - 如何交叉构建GZIP?

jquery - 在 ASP.NET MVC 2 中实现以下条目表单的想法

c# - 为什么我的 MVC viewModel 为空?

asp.net - 带有 asp.net mvc 和 web api 的前端 javascript 框架

jQuery - ASP.NET MVC - .load 和 RenderPartial

asp.net - "Dynamic operations can only be performed in homogenous AppDomain"错误