在运行时进程的什么时候IIS压缩输出?

时间:2016-07-29 20:42:51

标签: iis compression action-filter

我最近尝试将WebMarkupMin(一个运行时html缩小库)集成到我的站点(C#,IIS 8,MVC 4)中。我们启用了IIS压缩。我发现IIS实际上压缩了动作过滤器输出流,这意味着当我尝试在动作过滤器中缩小我的html时,我试图缩小已经压缩的内容。

问题:在运行时进程的什么时候IIS压缩输出?有没有办法使用mvc动作过滤器来修改html ouptut而不禁用IIS压缩?

3 个答案:

答案 0 :(得分:1)

ASP MVC输出的IIS动态压缩在管道中运行得相当晚。在我的测试中,它是349个管道项中的第315个,并且毕竟运行了asp.net模块。

要查看IIS管道中已执行模块的顺序,请为您的站点设置失败请求跟踪(FREB)并查看日志。

我想说你的MVC动作过滤器中没有办法告诉压缩模块不要压缩。

但你可以在网址上关闭压缩:

在您的网络配置中使用以下内容:

<location path="my/long/route/">
    <system.webServer>
      <urlCompression doDynamicCompression="false" />
    </system.webServer> 
</location>

您告诉IIS仅为该URL关闭动态压缩。

答案 1 :(得分:0)

必须为dynamicCompressionBeforeCache属性指定一个等于false的值:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  …
  <system.webServer>
    …
    <httpCompression …>
      …
    </httpCompression>
    <urlCompression … dynamicCompressionBeforeCache="false" />
    …
  </system.webServer>
  …
</configuration>

答案 2 :(得分:0)

我知道这是一个老问题,但是当我在UseStaticFiles之前使用UseResponseCompression时,错误已解决

        app.UseResponseCompression();
        app.UseStaticFiles(new StaticFileOptions
        {
            ServeUnknownFileTypes = true,
            OnPrepareResponse = context => context.Context.Response.Headers.Add("Cache-Control", "public, max-age=2592000")
        });
        app.UseWebMarkupMin();