begin process at 2010 03 22 15:05:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

 > RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET

RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous :Filter, HttpModule, Stream Niveau :Débutant Date de création :29/01/2009 Date de mise à jour :28/04/2009 23:29:53 Vu :4 796

Auteur : jesusonline

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

Dans certains cas, on a besoin de pouvoir manipuler le Stream dans lequel écrit ASP.net. Par exemple, on aimerait récupérer le flux de sortie afin d'enregistrer dans un fichier toutes les pages générées par ASP.net
Pour cela l'objet HttpResponse expose une propriété Filter. Cette propriété de type Stream est en lecture/écriture.

Cette source montre comment écraser la propriété Response.Filter afin d'enregistrer le flux envoyé au client sur le disque.
Pour cela nous utilisons un HttpModule.

Source

  • using System;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Web;
  • using System.IO;
  • using System.Web.UI;
  • public class FilterSampleModule : IHttpModule
  • {
  • public void Dispose() { }
  • public void Init(HttpApplication context)
  • {
  • context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
  • }
  • void context_PreRequestHandlerExecute(object sender, EventArgs e)
  • {
  • if (!(HttpContext.Current.Handler is Page))
  • return;
  • HttpContext.Current.Response.Filter = new MyStream(HttpContext.Current.Response.Filter);
  • }
  • }
  • public class MyStream : Stream
  • {
  • private Stream _originalStream;
  • private Stream _newStream;
  • public MyStream(Stream originalStream)
  • {
  • this._originalStream = originalStream;
  • this._newStream = new FileStream(@"c:/toto.html", FileMode.Create);
  • }
  • public override bool CanRead
  • {
  • get { return this._originalStream.CanRead; }
  • }
  • public override bool CanSeek
  • {
  • get { return this._originalStream.CanSeek; }
  • }
  • public override bool CanWrite
  • {
  • get { return this._originalStream.CanWrite; }
  • }
  • public override void Flush()
  • {
  • this._newStream.Flush();
  • this._originalStream.Flush();
  • }
  • public override long Length
  • {
  • get { return this._originalStream.Length; }
  • }
  • public override long Position
  • {
  • get
  • {
  • return this._originalStream.Position;
  • }
  • set
  • {
  • this._originalStream.Position = value;
  • this._newStream.Position = value;
  • }
  • }
  • public override int Read(byte[] buffer, int offset, int count)
  • {
  • this._newStream.Read(buffer, offset, count);
  • return this._originalStream.Read(buffer, offset, count);
  • }
  • public override long Seek(long offset, SeekOrigin origin)
  • {
  • this._newStream.Seek(offset, origin);
  • return this._originalStream.Seek(offset, origin);
  • }
  • public override void SetLength(long value)
  • {
  • this._originalStream.SetLength(value);
  • this._newStream.SetLength(value);
  • }
  • public override void Write(byte[] buffer, int offset, int count)
  • {
  • this._originalStream.Write(buffer, offset, count);
  • this._newStream.Write(buffer, offset, count);
  • }
  • protected override void Dispose(bool disposing)
  • {
  • base.Dispose(disposing);
  • if (disposing)
  • this._newStream.Dispose();
  • }
  • }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.UI;


public class FilterSampleModule : IHttpModule
{

    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
    }

    void context_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        if (!(HttpContext.Current.Handler is Page))
            return;

        HttpContext.Current.Response.Filter = new MyStream(HttpContext.Current.Response.Filter);
    }

}


public class MyStream : Stream
{

    private Stream _originalStream;
    private Stream _newStream;

    public MyStream(Stream originalStream)
    {
        this._originalStream = originalStream;
        this._newStream = new FileStream(@"c:/toto.html", FileMode.Create);
    }



    public override bool CanRead
    {
        get { return this._originalStream.CanRead; }
    }

    public override bool CanSeek
    {
        get { return this._originalStream.CanSeek; }
    }

    public override bool CanWrite
    {
        get { return this._originalStream.CanWrite; }
    }

    public override void Flush()
    {
        this._newStream.Flush();
        this._originalStream.Flush();
    }

    public override long Length
    {
        get { return this._originalStream.Length; }
    }

    public override long Position
    {
        get
        {
            return this._originalStream.Position;
        }
        set
        {
            this._originalStream.Position = value;
            this._newStream.Position = value;
        }
    }

    public override int Read(byte[] buffer, int offset, int count)
    {
        this._newStream.Read(buffer, offset, count);
        return this._originalStream.Read(buffer, offset, count);
    }


    public override long Seek(long offset, SeekOrigin origin)
    {
        this._newStream.Seek(offset, origin);
        return this._originalStream.Seek(offset, origin);
    }

    public override void SetLength(long value)
    {
        this._originalStream.SetLength(value);
        this._newStream.SetLength(value);
    }

    public override void Write(byte[] buffer, int offset, int count)
    {
        this._originalStream.Write(buffer, offset, count);
        this._newStream.Write(buffer, offset, count);
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        if (disposing)
            this._newStream.Dispose();
    }

}

 Conclusion

D'autres informations sont également disponible ici :

Cette source est juste un exemple d'utilisation de la propriété HttpResponse.Filter (http://msdn.microsoft.com/en-us/library/system.we b.httpresponse.filter.aspx)

Afin que cela fonctionne, n'oublier pas d'inscrire le HttpModule dans le web.config.

<configuration>
  <system.web>
    <httpModules>
      <add name="FilterSampleModule" type="FilterSampleModule, App_Code"/>
    </httpModules>
  </system.web>
</configuration>


 Historique

29 janvier 2009 16:38:30 :
Ajout du dispose
30 janvier 2009 12:50:03 :
Erreur lors de l'abonnement à l'évenement. Utilisation de PostRequestHandlerExecute plutot que PreRequestHandlerExecute

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID...
Source avec Zip Source .NET (Dotnet) OPTIMISATION DE LA SERIALISATION JSON POUR LES LIST<T>
Source avec Zip Source .NET (Dotnet) CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA...
Source avec Zip Source .NET (Dotnet) COMPACTER DU JAVASCRIPT

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID... par jesusonline
Source avec Zip Source .NET (Dotnet) CUSTOM DATEPIKER DÉRIVANT DE COMPOSITECONTROL par fredzool
Source avec Zip UN MODULE POUR APPRENDRE SQL par Elmarzougui
Source avec Zip Source .NET (Dotnet) BOUTON QUI EMPECHE LE MULTI CLIC AVANT LA FIN DU TRAITEMENT.... par fredzool
Source avec Zip Source .NET (Dotnet) BOUTON AVEC CSS ET USERCONTROL WITH EVENT par fredzool

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) HTTPMODULE DE DEBUG POUR LES UPDATEPANEL par jesusonline
UPLOAD D'IMAGES VIA ADODB.STREAM ET SQL SERVER par Nicolas_kojack
ADODB.STREAM, ENTRÉE D'OBJET OLE DANS UNE BASE DE DONNÉE, RÉ... par Nicolas_kojack

Commentaires et avis

Commentaire de lakichemole le 30/01/2009 09:12:54 7/10

Interressant, ça pourrais servir pour des tests?

Commentaire de jesusonline le 30/01/2009 09:24:12 administrateur CS

Si tu fais tes tests avec Visual Studio, tu n'as pas besoin de ça, c'est nativement intégré.

De mémoire, tu peux faire un test unitaire avec l'attribut et spécifier l'attribut HostType("ASP.net") et UrlToTest. Tu dois également pouvoir récuperer la réponse à partir d'un test web classique.

Commentaire de lakichemole le 30/01/2009 10:33:01

Oui je vais voir régulièrement ton blog, j'ai vu l'histoire du hostType et de l'appDomain c'est pas mal d'ailleur. Mais j'essayais de voir à quoi ça pourrais nous servir le response.filter, on pourrais imaginer un espèce de proxy basé la dessus?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

pb:stream et répertoire [ par taillecrayon ] j'ai placé un fichier.txt ds le répertoire database(pour y écrire,j'éspère).La ligne:monstreamreader=file.opentext(server.mappath("..\database\fichier index server [ par Wyz ] Bonjour. J'ai lu dans les forums qu'on pouvait effectuer des recherches dans les pages d'un site via index server. Ca ne semble pas excessivement comp pb lors de la récupération d'1 image de sql server avec asp.net/c# [ par salimhamidi ] salut &#224; tous, je vous remercie de votre contribution au site et de votre coup de pouce &#224; ceux qui en ont besoin.C'est ma premi&#232;re inter HttpModule Session [ par Oho2 ] Bonjour,Je suis en train de concevoir une appli intranet qui necéssite une authentification et l'utilisation de session. Une fois l'utilisateur connec HttpModule et session [ par Oho2 ] Bonjour,Je suis en train de concevoir une appli intranet qui necéssite une authentification et l'utilisation de session. Une fois l'utilisateur connec Pb de taile de fichier [ par syl62 ] Bonjour à tous, je précise que je suis débutant en ASP!mon problème est le suivant :j'ai une page qui permet d'afficher toutes les informations d'un p HttpModule Upload AJAX [ par David_Smith ] Bonjour,Je cherche à faire un composant d'upload en utilisant un HttpModule.J'ai un page avec un fileupload et bouton.Lorsque je valide mon formulaire téléchargement fichier de sql server [ par sajid_morad ] salut tout le mondeje développe un site intranet, j utilise ASP.NEt 2.0, le site contient des documents dans une base de données sql server 2005, pour filter l'affichage d'une base de données [ par williams59 ] Bonjour à tous,Je souhaite afficher un tableau avec  des données en provenance d'une base de données acess sur une page asp. Actuellement j'ai crée ce HttpModule, UrlRewriting et Session [ par Aramis74 ] Bonjour,Je travaille actuellement sur un module de réécriture d'URL. Et j'ai besoin d'initialiser des sessions pour lancer des recherches sur ma page


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,357 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales