6

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

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

随着升级,此属性的设置器抛出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 使用 aSystem.Web.Mvc.ViewPage.SwitchWriter作为 an 的输出属性HttpResponse,而 MVC 1 使用的是普通的旧HttpWriter. 这就解释了为什么抛出异常。

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

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

4

1 回答 1

3

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

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

于 2010-04-08T00:15:07.163 回答