J'ai écrit un HttpModule que j'utilise pour intercepter les appels du gestionnaire WebResource.axd afin que je puisse effectuer un post-traitement sur le javascript.Le filtre HttpResponse ne renvoie rien
Le module encapsule le flux Response.Filter pour effectuer son traitement et écrit ses modifications dans le flux sous-jacent.
Le problème que j'ai, c'est que le script ne retourne pas dans le navigateur.
Ainsi, comme exemple très simple que tout agit comme un laissez-passer à travers, le module ressemble à ceci:
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);
}
}
}
et le ResourceFilter qui vient en sortie ce qu'il reçoit ressemble à ceci:
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);
}
}
Je peux attacher et voir le module et le filtre invoqué, mais quand je navigue vers l'URL de WebResource.axd je ne reçois rien en retour.
J'ai utilisé ce modèle pour implémenter des modules qui effectuent un traitement sur des pages aspx et ils fonctionnent très bien. Il semble qu'il y ait quelque chose à propos de l'interaction avec WebResource.axd qui empêche ce fonctionnement.
Si quelqu'un est intéressé par le code pour définir le drapeau à faux : 'champ FieldInfo = _webStream.GetType() BaseType.GetField ("_ écrivain", BindingFlags.NonPublic | BindingFlags.Instance),' ' var = écrivain field.GetValue (_webStream)' ' FieldInfo ignoringWrites. = writer.GetType(). GetField ("_ ignoringFurtherWrites", BindingFlags.NonPublic | BindingFlags.Instance); ' ' ignoringWrites.SetValue (writer, false); ' – avidenic