WebResource.axd ハンドラーの呼び出しをインターセプトするために使用している HttpModule を作成したので、javascript で後処理を実行できます。
モジュールは 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 との相互作用について何かがあるようです。