ASP.Net MVC2(RTM)中断响应过滤 - “不允许过滤”

时间:2010-04-06 18:32:39

标签: c# asp.net asp.net-mvc asp.net-mvc-2 httpresponse

我刚刚完成了将项目升级到ASP.Net MVC 2(RTM)的测试运行,期待本月晚些时候发布完整的官方.Net 4.0版本。

我们的应用程序正在为CSS和javascript使用最小化器。为此,它正在使用HttpResponse.Filter属性来设置自定义过滤器。

升级后,此属性的setter抛出HttpException说“不允许过滤”。看反射器中的HttpResponse.Filter属性显示:

  set
    {
        if (!this.UsingHttpWriter)
        {
            throw new HttpException(SR.GetString("Filtering_not_allowed"));
        }

...

private bool UsingHttpWriter
{
    get
    {
        return ((this._httpWriter != null) && (this._writer == this._httpWriter));
    }
}

显然,HttpResponse在MVC2中写入输出流的方式发生了变化。有谁知道变化是什么,或者至少是解决方法?

编辑:这看起来非常激进。一些进一步的调查显示ASP.Net MVC 2 RTM使用System.Web.Mvc.ViewPage.SwitchWriter作为HttpResponse的输出属性,而MVC 1使用普通的旧HttpWriter。这就解释了为什么抛出异常。

但这并不能解释为什么他们选择彻底打破这种功能。 This thread似乎表明这只是暂时的......但这让我非常紧张......毕竟这是RTM。

对此有任何进一步的评论。

1 个答案:

答案 0 :(得分:3)

与常规的.aspx页面不同,MVC中的视图被视为HTML模板系统。这里的问题源于视图之后已经开始执行的事实,该页面试图安装响应过滤器以操纵发送给客户端的HTML。

这种情况下的解决方案是将响应过滤器安装移动到MVC管道的早期部分。例如,使用自定义操作筛选器,您可以覆盖OnResultExecuting()方法以安装自定义响应筛选器。这会将安装移出视图,并且不违反简单的HTML视图原则。