Accueil > > > RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET
RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET
Information sur la source
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
Sources de la même categorie
Commentaires et avis
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 à tous, je vous remercie de votre contribution au site et de votre coup de pouce à ceux qui en ont besoin.C'est ma premiè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
|
Derniers Blogs
TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVéTECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVé par ROMELARD Fabrice
Speaker : Guillaume Rochette Cette session est dédiée à fournir le retour sur la mise en place d'un cloud privé (IaaS) par Osiatis pour son compte ou celui de ses clients. Ce projet s'est déroulé sur 4 mois et a permis de faire évoluer...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|