J'ai écrit un module Http qui se connecte à la propriété Response.Filter de la requête en cours et effectue divers remplacements dans le code HTML avant qu'il ne soit envoyé au client.ASP.NET personnalisé HTTPModule - comment dire lors de l'écriture du dernier bloc de HTML dans la méthode Write?
Tout le travail est effectué dans la méthode Write qui écrase Write dans la classe de base Stream.
La méthode Write est appelée plusieurs fois pour une seule réponse - le code HTML semble être écrit dans le flux de sortie par blocs. Mon problème est que je n'ai pas un moyen efficace de dire si le morceau actuel est le dernier morceau (pour ce que je veux savoir ci-dessous). Le seul moyen que j'ai trouvé est de vérifier si le morceau contient une balise html de fermeture - mais ce n'est pas très efficace ou fiable. La raison pour laquelle cela est nécessaire est que le module doit ajouter l'en-tête HTTP "Refresh" à la réponse, mais seulement si le HTML remplit certaines conditions (et certaines conditions signifient que l'en-tête ne doit pas être ajouté). Ainsi, seulement lorsque le dernier morceau a été vu, le code sait si l'en-tête peut être ajouté ou non. Donc, soit j'ai besoin d'un test pour le dernier morceau, soit à chaque appel d'écrire j'ajoute l'en-tête si le bloc courant du HTML passe le test (si ça n'a pas déjà été ajouté) ou retire l'en-tête si le bloc HTML actuel échoue le test (s'il a déjà été ajouté). Donc, y a-t-il une meilleure façon de tester le dernier mandrin OU y a-t-il un moyen de tester qu'un en-tête particulier se trouve dans la réponse et de le supprimer (il n'y a pas moyen de le faire - seulement ajouter des en-têtes)?
Merci
Malheureusement, je ne vois pas comment calculer le nombre total d'octets de contenu. Tout ce que je peux voir dans ma méthode Write, ce sont les octets du bloc en cours. FYI, je n'ai aucun problème à ajouter un en-tête. – Laurence
Le flux source fournit-il une propriété de longueur? – Ray
Oui, mais le flux est en écriture seule et déclenche une exception dès que vous essayez d'appeler l'une des méthodes de lecture. J'aurais dû le mentionner! Je ne suis pas vraiment sûr de savoir pourquoi il est en écriture seule (je copie l'idée de ce module à partir de certains codes o/s). – Laurence