C# ASP.NETMVC2(RTM)中断了响应过滤;“不允许进行筛选”;

C# ASP.NETMVC2(RTM)中断了响应过滤;“不允许进行筛选”;,c#,asp.net,asp.net-mvc,asp.net-mvc-2,httpresponse,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 2,Httpresponse,我刚刚做了一个将项目升级到ASP.NETMVC2(RTM)的测试运行,预计将在本月晚些时候正式发布.NET4.0 我们的应用程序对CSS和javascript使用了最小化。为此,它使用HttpResponse.Filter属性来设置自定义过滤器 升级时,此属性的setter将抛出一个HttpException,表示“不允许筛选”。查看reflector中的HttpResponse.Filter属性,可以看出: set { if (!this.UsingHttpWrit

我刚刚做了一个将项目升级到ASP.NETMVC2(RTM)的测试运行,预计将在本月晚些时候正式发布.NET4.0

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

升级时,此属性的setter将抛出一个
HttpException
,表示“不允许筛选”。查看reflector中的
HttpResponse.Filter
属性,可以看出:

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

显然,HttpResponse写入MVC2中输出流的方式发生了一些变化。有人知道这是什么变化,或者至少知道这是一个解决办法吗

编辑:这似乎很激进。一些进一步的调查显示,ASP.Net MVC 2 RTM使用
System.Web.MVC.ViewPage.SwitchWriter
作为
HttpResponse
的输出属性,而MVC 1使用的是普通的
HttpWriter
。这解释了抛出异常的原因

但这并不能解释为什么他们选择完全破坏这个功能。似乎表明这只是暂时的。。。但这让我很紧张。。。这毕竟是RTM


欢迎对此发表进一步评论。

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


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

值得一提的是,MVC 2 RTM已经发布:谢谢-这就是我正在尝试升级的内容。我应该把标题说得更清楚些。你想做的事情可能从一开始就不被支持。如果您实际上是想钩住静态内容的服务方式,请不要通过WebForms视图引擎来实现这一点。你到底想干什么?为什么你需要一个过滤器来解决这个问题?为什么你认为它不受支持?我们不需要查看引擎-我们只是查看渲染结果。关键是,此更改甚至打破了简单的筛选,如以下示例:。你基本上永远不能设置filter属性。而且,如果必须的话,我会毫不犹豫地重构旧代码以使用不同的方法。我想我的问题是——“为什么会发生这种情况,它是永久性的,有解决办法吗?”
private bool UsingHttpWriter
{
    get
    {
        return ((this._httpWriter != null) && (this._writer == this._httpWriter));
    }
}