我编写了一个 HttpModule,用于拦截对 WebResource.axd 处理程序的调用,以便我可以对 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 的交互存在一些问题,阻止了此工作。