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
[WF4] PASSAGE D'ARGUMENTS LITERAL, VISUALBASICVALUE OU LAMBDAVALUE?[WF4] PASSAGE D'ARGUMENTS LITERAL, VISUALBASICVALUE OU LAMBDAVALUE? par JeremyJeanson
Avec la sortie de la RC de Visual Studio 2010, Microsoft a mis un peu les points sur leS i en ce qui concernait le passage d'arguments. Mais nous somme un certain nombre à avoir pris ce changement comme un coup dur. Pour résumer la situation : à la sortie...
Cliquez pour lire la suite de l'article par JeremyJeanson [RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit
Forum
CONFIGURER SMTPCONFIGURER SMTP par nsegi
Cliquez pour lire la suite par nsegi LES UTILISATEUR LES UTILISATEUR par bahij
Cliquez pour lire la suite par bahij
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|