6

今月後半に正式な .Net 4.0 がリリースされるのを見越して、プロジェクトを ASP.Net MVC 2 (RTM) にアップグレードするテストを実行しました。

私たちのアプリケーションは、CSS と JavaScript に最小化機能を使用しています。そのために、HttpResponse.Filterプロパティを使用してカスタム フィルターを設定します。

アップグレードにより、このプロパティのセッターはHttpException「フィルタリングは許可されていません」というメッセージをスローします。Reflector の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.SwitchWriteran の出力プロパティとしてa を使用しているのHttpResponseに対し、MVC 1 はプレーンな古い を使用していたことがわかりHttpWriterます。これは、例外がスローされる理由を説明しています。

しかし、それではなぜこの機能を完全に壊すことにしたのか説明できません。 このスレッドは、これが一時的なものであることを示しているようです...しかし、これは私をかなり緊張させます...結局、これはRTMです.

これについてさらにコメントをいただければ幸いです。

4

1 に答える 1

3

MVC のビューは、通常の .aspx ページとは異なり、HTML テンプレート システムとして扱われることを意図しています。ここでの問題は、ビューが既に実行を開始した後、クライアントに送信される HTML を操作するために、ページが応答フィルターをインストールしようとしたことに起因しています。

この場合の解決策は、応答フィルターのインストールを MVC パイプラインの前の部分に移動することです。たとえば、カスタム アクション フィルターを使用すると、OnResultExecuting() メソッドをオーバーライドしてカスタム応答フィルターをインストールできます。これにより、インストールがビューの外に移動し、単純な HTML のみのビューの原則に違反しなくなります。

于 2010-04-08T00:15:07.163 に答える