11

現在、asp.net mvc 3 VS 2010 を使用しています。VS 2013 をインストールしたところ、カスタム フィルターが機能しません。ページがレンダリングされると、空白のページが表示されます。フィルターにはデータがあり、それを書き出しますが、連鎖プロセスの何かが機能していません。

var response = filterContext.HttpContext.Response;
response.Filter = new MappingResponse(response.Filter);

Visual Studio 2010 では、フィルターはSystem.Web.HttpResponseStreamFilterSink.

Visual Studio 2013 では、フィルターはMicrosoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter

ドキュメントでそのクラスを見つけることさえできません。ストリーム クラスを呼び出すときに、Write メソッドをチェーンしていないようです。

これは、ストリームを書き出す実際のコードです

var responseBuffer = UTF8Encoding.UTF8.GetBytes( htmlPage );
responseStream.Write( responseBuffer, 0, responseBuffer.Length );
4

2 に答える 2

10

長い間掘り下げた後、VS2013に新しい機能が追加されていることに気付きました。SignalR - 結局のところ、これは ArteryFilter の問題に関連しています。

したがって、この問題を解決するには、[デバッグ] ボタンの横にある [ブラウザー リンクを有効にする] 機能のチェックを外します。フィルターは再び期待どおりに機能します。VS2013 がフィルターをチェーンしないのはまだ奇妙です。

チェックを外す

また、これは一般的な ASP.NET 機能であり、MVC に限定されないことに注意してください。

歴史のために保存 - 答えは上にあります

私は同じことを経験していますが、これまでのところ、VS2013 自体ではなく、新しい IISExpress に関連しているようです。VS2012 で正常に機能していたものは、VS2013 のインストールによって導入されたものと同じ運命をたどります。

通常の IIS を介して実行すると、問題がなくなるため、コードは正常に動作します。この {Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter} を無効にする方法が見つかったらお知らせください。

さらに調査すると、applicationhost.config (通常は %USERPROFILE%\documents\IISexpress\config にあります) が実際に VS2013 によって変更されていることがわかります。バックアップの名前を ApplicationHost.config.20120825120333.bak に変更しました。この謎の解決策は、この構成変更に隠されています。

構成を直接復元すると、IISExpress が VS2013 から起動できなくなります。

1つのあまり良くない解決策:

デバッグをオフにすると (CTRL+F5 に相当)、IISExpress は期待どおりに動作します。デバッグを有効にすると、このエントリに関する機能が再び導入されます。

  <system.web>
    <compilation targetFramework="4.5" debug="false"/>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
于 2013-10-18T20:39:15.227 に答える