WebResource.axdハンドラーを呼び出すために使用しているHttpModuleを記述しました。これにより、JavaScriptで後処理を実行できます。HttpResponseフィルターは何も返しません。
モジュールは、処理を実行するためにResponse.Filterストリームをラップし、その変更を基になるストリームに書き込みます。
問題は、スクリプトがブラウザに返されないということです。
はそうちょうど通過として動作し、本当に簡単な例として、モジュールは次のようになります。
public class ResourceModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PostRequestHandlerExecute += new EventHandler(context_PostRequestHandlerExecute);
}
void context_PostRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication context = sender as HttpApplication;
if (context.Request.Url.ToString().Contains("WebResource.axd"))
{
context.Response.Filter = new ResourceFilter(context.Response.Filter);
}
}
}
とちょうどそれがこのようにルックスを受け取るどのような出力ResourceFilter:
public class ResourceFilter : MemoryStream
{
private Stream inner;
public ResourceFilter(Stream inner)
{
this.inner = inner;
}
public override void Write(byte[] buffer, int offset, int count)
{
inner.Write(buffer, offset, count);
}
}
呼び出されるモジュールとフィルタを添付して参照できますが、WebResource.axd urlを参照すると何も返されません。
私はこのパターンを使用して、aspxページの処理を実行するモジュールを実装しましたが、うまく動作します。この作業を妨げるWebResource.axdとのやり取りについては何かがあるようです。
より古いIISのバージョンで動作させるために、遅くともPreRequestHandlerExecuteイベントで「夢中」する必要があります: 'のFieldInfoフィールド= _webStream.GetType()BaseType.GetField( "_ライター"、BindingFlags.NonPublic | BindingFlags.Instance);' 'VARライター= field.GetValue(_webStream);' 'のFieldInfo ignoringWrites。 = writer.GetType()。GetField( "_ ignoringFurtherWrites"、BindingFlags.NonPublic | BindingFlags.Instance); ' 'ignoringWrites.SetValue(writer、false);' – avidenic