我刚刚完成了将项目升级到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。
对此有任何进一步的评论。
答案 0 :(得分:3)
与常规的.aspx页面不同,MVC中的视图被视为HTML模板系统。这里的问题源于视图之后已经开始执行的事实,该页面试图安装响应过滤器以操纵发送给客户端的HTML。
这种情况下的解决方案是将响应过滤器安装移动到MVC管道的早期部分。例如,使用自定义操作筛选器,您可以覆盖OnResultExecuting()方法以安装自定义响应筛选器。这会将安装移出视图,并且不违反简单的HTML视图原则。