2008-12-11 8 views
1

J'ai un HttpModule avec un filtre (PageFilter) où la méthode Writer de PageFilter est appelée deux fois pour chaque requête de page, malheureusement pas avec le même résultat.HttpModule avec filtre - La méthode Writer est appelée deux fois

L'idée du filtre est de localiser "" et d'insérer du texte/script devant celui-ci. J'ai localisé un tas d'erreurs mineures (et les ai corrigées), mais cette erreur joue des tours sur moi ...

Le constructeur og PageFilter est appelé une fois, mais sa méthode d'auteur est appelée deux fois par demande?

ci-dessous est le contenu de PageFilter.Writer (qui se déroule deux fois)

string strBuffer = System.Text.UTF8Encoding.UTF8.GetString (buffer, offset, count); 

try 
{ 
    Regex eof = new Regex("</html>", RegexOptions.IgnoreCase); 

    if (!eof.IsMatch(strBuffer)) 
    { 
     //(1) 
     responseHtml.Append(strBuffer); 
    } 
    else 
    { 
     //(2) 
     responseHtml.Append (strBuffer); 
     string finalHtml = responseHtml.ToString(); 
     Regex re = null; 

     re = new Regex ("</body>", RegexOptions.IgnoreCase); 
     finalHtml = re.Replace(finalHtml, new MatchEvaluator(lastWebTrendsTagMatch)); 
     // Write the formatted HTML back 
     byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes (finalHtml); 

     responseStream.Write(data, 0, data.Length);  

     } 
    } 
    catch (Exception ex) 
    { 
     Logging.Logger(Logging.Level.Error, "Failed writing the HTML...", ex); 
    } 

première fois que la méthode fonctionne cas (1) fonctionne et le 2 cas (2) pistes ... ce n'est pas excatly ce Je veux, quelqu'un sait pourquoi et/ou comment je peux le faire fonctionner (de manière cohérente)?

Répondre

1

La méthode Write peut être appelée plusieurs fois pour une seule page. L'objet HttpWriter regroupe des données, puis les écrit dans son flux de sortie. Chaque fois que le HttpWriter envoie un morceau de données, la méthode Write de votre filtre de réponse est invoquée.

Reportez-vous cela pour une sorte de solution ...

  1. HttpResponse.Filter write multiple times

Au lieu de responseStream.Write (données, 0, data.Length); try responseStream.Write (données, 0, données.Longueur-1);

J'espère que vous trouverez cela utile.

+0

Haven Vous n'avez pas encore accès à ExpertExchange, mais je vais jeter un oeil sur les liens – noesgard

+0

Celui-ci n'est pas un lien payant. Aucun abonnement requis. Il suffit d'aller au fond de la page là-bas ... –

+0

oui, il faut commencer 7 jours d'essai en premier pour voir la solution et de le faire en exigeant d'abandonner les informations de carte de crédit. J'envisage si c'est correct (ne pas avoir de cartes de crédit disponibles à cet endroit, donc je devrais aller en recueillir un ... juste pour tester si les solutions que j'utilise ... – noesgard

0

Ces "événements" se produit au cours de la page 1 demande:

isAspx = true og/_layouts/non trouvé (je vérifie que le fichier est .aspx et URL ne contenant pas/_layouts /)

constructeur PageFilter appelé

méthode Writer initiée ...

eOF (regex): (regex contenant cre ATED pour la correspondance)

eof.IsMatch (strBuffer): (n'a pas match de la regex)

méthode Writer lancé ... (deuxième temps callinge autour de l'écrivain)

EOF (regex): (regex contenant créé pour l'appariement)

regex initié (identifié l'expression rationnelle)

re (regex): (trouvé le corps tag I besoin d'insérer mon script)

ScriptInclude = true (J'ai trouvé le site Web .clé de config dire mon application qu'il devrait inclure le script)

scénario américain utilisé (je l'ai utilisé la version américaine du script également basé sur une clé de configuration Web )

problème est: sur mon déploiement dev l'auteur s'exécute deux fois, se terminant par la séquence ci-dessus et le script étant inclus. Sur mon déploiement de test l'auteur passe deux fois et finit par ne pas y compris le script ...

Je voudrais éviter l'appel de l'auteur deux fois, mais plus encore que d'avoir le script inclus sur le déploiement de test

+0

Mon erreur, une clé manquante sur la plate-forme de test a provoqué le dysfonctionnement ... – noesgard

Questions connexes