2009-09-07 8 views
0

J'ai besoin de réécrire les noms de domaine sur les pages web desservies par une DLL que je n'ai aucun moyen de changer. Je pensais que s'il y avait des événements comme OnFlush avant Response.Flush se produit sur la page, je pourrais tout faire avant que la page est affichée. Y a-t-il un moyen de le faire en ASP?Response.Flush - événement OnFlush en ASP classique?

Merci pour votre aide.

P.S .: Quelque chose comme Script_OnFlush dans cette extension APACHE: http://www.apache-asp.org/events.html


la suggestion de Nick J'ai créé une classe qui hérite de la classe Stream. Response.Filter utilise cette classe pour travailler sur le contenu HTML ...

En remplaçant la méthode Write, j'ai réussi à réécrire les noms de domaine sur le site.

public override void Write(byte[] buffer, int offset, int count) 
    { 
    byte [ ] data = new byte [ count ]; 
    Buffer.BlockCopy (buffer, offset, data, 0, count); 

    string myHTML = ASCIIEncoding.ASCII.GetString(data); 
    string convertedHTML = myHTML.Replace("http://www.previousdomain.com", "http://www.currentdomain.com"); 

    data = ASCIIEncoding.ASCII.GetBytes(convertedHTML); 

    _sink.Write (data, 0, count); 

    } 

Merci Nick!

+0

Classic ou .NET ASP? – AnthonyWJones

+0

Classique, j'ai peur. :( –

+0

Est-ce que ces extensions ISAPI dll, les filtres ou les composants COM sont appelés à partir des pages ASP? – AnthonyWJones

Répondre

1

Oui, vous pouvez surcharger la propriété R esponse.Filter, qui agit comme un filtre pour tout le contenu renvoyé au navigateur. Vous devriez le faire dans le PostReleaseRequestState dans le Global.asax.

+0

N'est-ce pas ASP, par exemple, pas asp.net mais classique ASP – svinto

+0

Nope, ASP.NET, si Vous ne voulez pas utiliser Global.asax, vous pouvez créer votre propre module en utilisant l'interface IHttpModule –

+0

Merci Nick, mais je dois le faire d'une manière ou d'une autre en ASP classique –