利用 ActionFilter 为 ASP.NET Web API 添加 GZip 压缩功能

ASP.NET MVC与Web API进阶配置:解决Filter依赖注入与全局异常处理难题 在Web开发中,依赖注入(DI)是实现松耦合和可测试性的核心设计模式,它通过容器管理对象的创建与生命周期,提升了代码的可维护性。其原理在于控制反转,将依赖对象的控制权从组件内部转移到外部容器。这一技术价值在于简化了复杂依赖管理,促进了模块化开发。在ASP.NET MVC和Web API等企业级框架中,依赖注入的应用尤为关键,特别是在自定义过滤器(Filter)等扩展点中。然而,框架默认的Filter实例化机制与DI容器存在冲突,导致在ActionFilter或AuthorizationFilter中无法直接 阅读详情

直接上代码

public class DeflateCompressionAttribute : ActionFilterAttribute
{
   public override void OnActionExecuted(HttpActionExecutedContext actContext)
   {
       var contentType = actContext.Response.Content.Headers.ContentType.ToString();
       var content = actContext.Response.Content;
       var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result;
       var zlibbedContent = bytes == null ? new byte[0] : 
       CompressionHelper.DeflateByte(bytes);
       actContext.Response.Content = new ByteArrayContent(zlibbedContent);
       actContext.Response.Content.Headers.Remove("Content-Type");
       actContext.Response.Content.Headers.Add("Content-encoding", "deflate");
       actContext.Response.Content.Headers.Add("Content-Type", contentType);
       base.OnActionExecuted(actContext);
    }
}

public class CompressionHelper
{ 
    public static byte[] DeflateByte(byte[] str)
    {
        if (str == null)
        {
            return null;
        }

        using (var output = new MemoryStream())
        {
            using (var compressor = new Ionic.Zlib.DeflateStream(output, Ionic.Zlib.CompressionMode.Compress, Ionic.Zlib.CompressionLevel.BestSpeed))
            {
                compressor.Write(str, 0, str.Length);
            }

            return output.ToArray();
        }
    }
}

使用 DeflateCompression 来标记需要压缩的 Web API

public class V1Controller : ApiController
{
    [DeflateCompression]
    public HttpResponseMessage GetCustomers()
    {

    }
}

备注

  • 增加对 Request 中 Accept-Encoding 设定的判断,如果客户端请求包含压缩请求才进行压缩
  • 示例利用了第三方库来进行,可以视情况来自定义替换为其他库
手写轻量级 ASP.NET 服务框架:深入管线、Handler 与 Module ASP.NET 管线是请求处理的核心机制,其本质是一系列可订阅的生命周期事件链;HttpHandler 承担业务逻辑执行职责,HttpModule 则负责横切关注点(如认证、日志、重写)的拦截与调度。这种职责分离设计赋予了极高的可预测性与定制自由度,尤其适用于统一网关、协议适配、深度监控等工程场景。相比 MVC 的高抽象封装,基于原生管线构建的轻量级服务框架,能精准控制序列化方式、URL 路由时机与请求流劫持点,让开发者真正掌握从 IIS 接入到响应输出的全链路。本文即围绕 ASP.NET 管线与 Http 阅读详情

相关推荐

ASP.NET Core HTTP缓存控制:从Header设置到多层信任链治理

HTTP缓存不是简单的响应头配置,而是基于RFC 7234的跨组件协同机制,其核心在于客户端、代理(如CDN)与源服务器构成的三层信任链。缓存行为由Cache-Control、ETag、Last-Modified和Vary等头部共同定义,但各环节可依策略降级或覆盖——例如Azure Front Door会忽略max-age而依据Last-Modified二次计算缓存时长。ASP.NET Core提供声明式([ResponseCache])与命令式(Response.GetTypedHeaders())双轨控

427

ActionFilterAttribute之CompressFilter,GZIP,DEFLATE压缩

开启Gzip,Deflate压缩也会给减小网站页面大小,进而减小使用带宽,只需设置此Filter标签,便可实现.其中当页面出现错误时,会禁止压缩,以防用户看不到调式错误.public class CompressFilter : ActionFilterAttribute { #region = IsAvailable = private bool

LeeWhoee University 2288

最新版的GZIP ASP.NET

最新版的GZIP ASP.NET 最新版的GZIP ASP.NET

ASP.NET Web Api 的响应数据压缩gzip/deflate

首先一张图看懂ASP.NET web api ApiController: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.Http.Filters; using System.IO.Compression; using System.Net.Http; namespace Mizusho.OA..

xiejie0226的博客 1355

针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试

针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试

四路独立可控供电USB 2.0智能集线器设计

USB集线器是连接外设的基础接口设备,其供电管理能力直接影响系统可靠性与远程运维效率。传统HUB仅提供固定VBUS输出,缺乏端口级电源控制机制,难以实现软复位、故障隔离与功耗优化。本方案基于USB 2.0协议透明转发原理,通过硬件级电子负载开关(如MT9700)与独立MCU(ESP32-C3)协同,构建具备四路独立限流(680mA)、纳秒级通断响应、WiFi/MQTT远程管控能力的智能供电架构。技术价值体现在协议无侵入、控制域与数据域物理隔离、默认安全上电策略等工程实践要点,广泛适用于工业远程调试、实验室设

weixin_36289742的博客 193

webapi 利用 ActionFilter 为 ASP.NET Web API 添加 GZip 压缩功能

webapi 利用 ActionFilter 为 ASP.NET Web API 添加 GZip 压缩功能/// <summary> /// 对结果进行压缩处理 /// </summary> public class DeflateCompressionAttribute : ActionFilterAttribute { p...

胡杰的专栏 2332

2080Ti双卡开启NVLink

本文介绍了如何在Ubuntu 22.04系统下给2080Ti双卡开启NVLink的方法。

flymyd的博客 2899

webapi 开启gzip压缩

1.nuget安装Microsoft.AspNet.WebApi.Extensions.Compression.Server 2.global.asax.cs里引用System.Net.Http.Extensions.Compression.Client 3.global.asax.cs的Application_Start方法里加入: GlobalConfiguration.Configuration.MessageHandlers.Insert(0, new ServerCompressionHandle

liudanyang_21的博客 652

TTL电路搭建半加器实验:操作指南完整版

通过TTL电路搭建半加器,详解逻辑设计与实验步骤,帮助掌握数字电路中的半加器工作原理与实际应用,适合电子技术初学者动手实践。

weixin_42524864的博客 355

SAP FICO 银企直连

银企直联或者自动付款的目的是和银行做一个接口,把SAP中的到期应付款(也包括预付款)按照一定格式(银行要求的)在审批后发送给银行,请银行按照这个付款指定进行付款,并跟踪付款状态的过程,这个过程在SAP中如何实现呢?根据个人项目经验,客户需求可分为如下三种: 1. 第一种是完全不自动方式,仅批量生成付款凭证,实际的付款还是通过原来的流程执行,和银行没有任何接口; 2. 第二种是半自动方式,这种方式下需要按照银行的要求的格式生成付款条件,然后把付款文件下载下来,通过企业版的网银接口把付款文件进行上载,提交后

IamRunjiang的博客 9287

基于Python的军事装备信息爬虫实战:Scrapy+Playwright+智能反反爬技术

本文将详细介绍如何使用Python构建一个高效的军事装备信息爬虫系统。我们将从基础的HTTP请求开始,逐步深入到使用Scrapy框架、Playwright浏览器自动化以及最新的反反爬技术。文章包含完整的代码实现、性能优化策略以及数据处理方案,旨在为读者提供一个全面的军事信息爬取解决方案。关键词:Python爬虫、军事装备、Scrapy、Playwright、反反爬。

2201_76125261的博客 1155

ASP.NET Web API中使用GZIP 或 Deflate压缩

对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式。 那么如何实现对ASP.NET Web API 进行压缩呢,我将使用非常流行的库用于压缩/解压缩称为DotNetZip库。这个库可以使用NuGet包获取 现在,我们实现了Deflate压缩ActionFilter。 public class DeflateCompressionAttribute : ActionFilter...

weixin_30252155的博客 299

Trae辅助开发完全教程:从入门到企业级实战

《Trae AI IDE完全教程》系统介绍了这款AI驱动的下一代集成开发环境。教程从基础入门到实战应用,详细讲解了Trae的双重开发模式(IDE/SOLO)、智能编程助手CUE、行内对话、模型管理等核心功能。内容包括环境配置、项目创建、Python开发示例,以及RPC框架和iOS应用两个实战案例。Trae通过深度整合AI技术,显著提升编码效率,支持多种编程语言和主流模型,适合从新手到企业级开发者的不同需求。本教程帮助开发者快速掌握Trae的使用技巧,实现AI辅助下的高效编程。

MrLi的博客 763

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1290

ASP.NET Core配置进阶:解决响应压缩、路由冲突与依赖注入的实战难题

在Web开发中,中间件是处理HTTP请求与响应的核心组件,它通过管道模型串联执行,实现认证、压缩、路由等关键功能。理解其执行顺序与生命周期是构建高性能应用的基础。依赖注入作为现代框架的基石,通过控制反转管理服务依赖,其生命周期管理直接影响应用的稳定性和资源效率。本文聚焦ASP.NET Core实战中常见的配置难题,深入剖析响应压缩中间件与自定义过滤器的执行冲突、路由匹配的优先级陷阱,以及Scoped服务在Singleton中注入引发的并发风险。通过具体案例,如Gzip压缩失效、API端点404错误及数据污染

weixin_34150830的博客 456

V-Mamba:2D 选择性扫描状态空间模型图像分类

V-Mamba CIFAR-10 分类链路:32² RGB → Stem Conv (3→64ch, stride2→16²) → VMambaBlock ×4 (SS2D 四方向 → Mamba S6 扫描 → MLP) → GAP → Linear → 10 类。核心贡献:SS2D 四方向扫描将 2D 空间建模转为 4 个 1D 序列, 计算复杂度从 O(N²) 降至 O(N)。建议先从 CIFAR-10 dim=64 depth=4 验证 SSM 收敛性;

FJN110的博客 70

Asp.Net MVC与Web API核心配置实战:路由、JSON序列化与依赖注入详解

在Web开发中,路由机制是框架处理HTTP请求的核心,它决定了URL如何映射到对应的控制器和动作方法。其工作原理基于模式匹配和优先级规则,确保请求能够准确到达目标处理程序。深入理解路由配置对于构建清晰、可维护的API和页面结构至关重要,能有效避免404或405错误。在实际工程实践中,内容协商与JSON序列化是构建高效数据接口的关键技术,它们直接影响API的易用性和性能。例如,通过合理配置格式化器,可以确保API在不同场景下稳定返回预期的数据格式,并处理日期、循环引用等常见序列化问题。依赖注入(DI)作为实现

weixin_30536513的博客 443

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ASP.NET MVC/Web API核心配置实战:从程序集绑定到依赖注入的避坑指南

在Web应用开发中,配置管理是确保系统稳定运行的基石,它定义了程序集加载、请求路由、依赖注入等核心行为。理解其原理对于排查线上故障至关重要,例如程序集版本冲突引发的“未能加载文件或程序集”错误,其根源在于.NET的强名称绑定策略,需通过绑定重定向精准控制。依赖注入的生命周期管理则是另一技术关键,错误地将Scoped服务注入Singleton可能导致内存泄漏或数据混乱。这些配置直接影响应用的可维护性、扩展性与性能。本文聚焦于ASP.NET MVC和Web API框架,深入解析程序集绑定、路由、过滤器及依赖注入

aodiyi6351的博客 400

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WebAPI性能优化之压缩解压

有时候为了提升WebAPI的性能,减少响应时间,我们会使用压缩和解压,而现在大多数客户端浏览器都提供了内置的解压支持。在WebAPI请求的资源越大时,使用压缩对性能提升的效果越明显,而当请求的资源很小时则不需要使用压缩和解压,因为压缩和解压同样也是需要耗费一定的时间的。 看见老外写了一篇ASP.NET Web API GZip compression ActionFilter with 8 li...

weixin_34034261的博客 233

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ASP.NET MVC 5实战:从零构建高性能婚庆网站全攻略

在Web开发领域,模型-视图-控制器(MVC)架构模式因其清晰的职责分离和可维护性,成为构建复杂业务系统的首选方案。其核心原理在于将数据模型、用户界面和控制逻辑解耦,使开发者能够并行工作并提升代码复用率。这一模式的技术价值在于为中等规模项目提供了稳健的工程实践基础,尤其适用于需要精细后台管理和前台展示的企业级应用,例如内容管理系统、电商平台及在线服务平台。ASP.NET MVC作为微软官方实现的成熟框架,结合Entity Framework等强大生态工具,能够高效处理数据持久化、用户认证和实时通信等需求。本

weixin_30383279的博客 386

基于ASP.NET MVC 5的婚庆网站开发实战:从架构到部署

在Web开发领域,ASP.NET MVC是一种广泛应用的架构模式,它通过模型(Model)、视图(View)和控制器(Controller)的分离,实现了业务逻辑、数据与用户界面的解耦,从而提升了代码的可维护性和可测试性。这一原理对于构建需要稳定数据管理和动态内容展示的企业级应用,如电商、内容管理系统和展示型网站,具有显著的技术价值。特别是在婚庆服务这类注重案例展示与在线咨询的行业场景中,一个结构清晰、易于扩展的网站是高效获客与专业服务的关键。本文以ASP.NET MVC 5为核心技术栈,结合Entity

weixin_30883311的博客 443

ASP.NET MVC三层架构项目深度解析:从经典实现到现代化重构

三层架构是构建企业级Web应用的核心设计模式,通过分离表示层、业务逻辑层和数据访问层,实现了高内聚低耦合的代码组织。其原理在于明确各层职责:表示层处理用户交互,业务层封装核心规则,数据层负责持久化操作。这种分层设计的技术价值在于提升系统的可维护性、可测试性和团队协作效率,尤其适用于业务逻辑复杂的管理系统。在应用场景上,三层架构广泛应用于ERP、CRM、供应链管理等传统行业信息化系统,为业务稳定运行提供坚实基础。本文以ASP.NET MVC项目为例,深入剖析其控制器(Controller)如何作为请求调度中枢

weixin_30736301的博客 345

ASP.NET服务端GZIP压缩

         ASP.NET服务端GZIP压缩模块的作用及工作原理,很多人编写网页的时候页面因为使用了大量的JS特效又或者放置很多大型动态广告导致了页面或脚本体积庞大,通常都会使用一些压缩工具本地对页面或脚本进行一定的压缩后再上传到服务器,但这样的压缩工具一般压缩率有限,优化自然也不明显,本文章介绍的压缩模块的作用就是对asp.net的页面或脚本等资源进行高强度GZIP压缩(一般能压缩到只

down to earth life 2235

MVC中Action过滤器(OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecued)

MVC中Action过滤器(OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecued)

枫林街末 7672
上一篇: SQL Server的四种隔离级别知识点
下一篇: Fuslogvw.exe (Assembly Binding Log Viewer)
sqlchen
博客等级 码龄24年 10粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值