我最近尝试将WebMarkupMin(一个运行时html缩小库)集成到我的站点(C#,IIS 8,MVC 4)中。我们启用了IIS压缩。我发现IIS实际上压缩了动作过滤器输出流,这意味着当我尝试在动作过滤器中缩小我的html时,我试图缩小已经压缩的内容。
问题:在运行时进程的什么时候IIS压缩输出?有没有办法使用mvc动作过滤器来修改html ouptut而不禁用IIS压缩?
答案 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();