Ich habe ein HttpModule geschrieben, das ich zum Abfangen von Aufrufen der WebResource.axd-Handler verwendet, so dass ich einige Nachbearbeitung auf dem Javascript ausführen kann.HttpResponse-Filter gibt nichts zurück
Das Modul umschließt den Response.Filter-Stream, um seine Verarbeitung auszuführen, und schreibt seine Änderungen in den zugrunde liegenden Stream.
Das Problem, das ich habe, ist, dass das Skript nicht an den Browser zurückgegeben wird.
So wie ein wirklich einfaches Beispiel, das nur als Durchgang durch wirkt, sieht das Modul wie folgt aus:
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);
}
}
}
und die ResourceFilter, die nur ausgibt, was es sieht wie folgt erhält:
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);
}
}
Ich kann anfügen und sehen, das Modul und Filter aufgerufen wird, aber wenn ich zu WebResource.axd URL blättern, bekomme ich nichts zurück.
Ich habe dieses Muster verwendet, um Module zu implementieren, die Verarbeitung auf Aspx-Seiten ausführen, und sie funktionieren gut. Es scheint, dass etwas an der Interaktion mit der WebResource.axd ist, die das verhindert.
älter funktioniert Wenn jemand in Code interessiert das Flag auf false gesetzt : 'Fieldinfo field = _webStream.GetType() BaseType.GetField ("_ writer", BindingFlags.NonPublic | BindingFlags.Instance);' 'var writer = field.GetValue (_webStream);' ' Fieldinfo ignoringWrites. = writer.GetType(). GetField ("_ ignoringFurtherWrites", BindingFlags.NonPublic | BindingFlags.Instance); ' ' ignoringWrites.SetValue (writer, false); ' – avidenic