ResponseStreamFilterをHttpResponse.Filterに適用しようとすると、IIS7 から 405 エラーと次の例外が発生します。
HttpException:
The HTTP verb POST used to access path '/app/Thing.asmx/Command' is not allowed.
次のようなコードで HttpModule を使用してフィルターを適用しています。
var rfs = new ResponseFilterStream(HttpContext.Current.Response.Filter);
rfs.TransformStream +=
new Func<System.IO.MemoryStream, System.IO.MemoryStream>(ProcessStream);
HttpContext.Current.Response.Filter = rfs;
Log("Response stream filter applied correctly.");
HttpModule のすべてのコードは問題なく動作します...安全のためにすべてが try-catch にラップされ、例外はスローされず、上記の最後の行のような診断ログは正しく機能しています。
しかしProcessStream
、上記のコードのメソッドは呼び出されていないようです。フィルターをHttpResponse.Filter
まったく適用すると、IIS はフィルターの処理を開始する前に 405 例外をスローします。
私たちのコードは以前にいくつかの同様のシステムで機能していたため、この特定のサーバーの IIS/マシン構成が原因であると思われます。 何が原因でしょうか?
このような状況で最もよく報告される 405 エラーの原因は、Url.Rewrite を使用しているようです。(パス '/test.html' へのアクセスに使用される HTTP 動詞 POST は許可されていません) ただし、Url.Rewrite は使用していません。
よく報告される別の原因は、リクエスト URL の末尾のスラッシュです。( HTTP POST IIS ASP .NET のエラーで HTTP 405 ) しかし、前述のように、要求されている URL はスラッシュで終わっていません。
アプリ プールはクラシック パイプラインで .NET 4.0 を実行しています ( jQuery AJAX post receive 405 error (HTTP verb POST not allowed) )。このサーバーの構成に固有のものになります。統合パイプラインに変更すると、コードがフィルタリングしているアプリケーションが破損するため、とにかく回避策はありません。