2009-09-04 14 views
9

Özellikle yapmaya çalıştığım şey:HttpModule içinden yanıt html'yi nasıl alabilirim?

Bazı siteye özgü izleme yapmak için bir HttpModule yazdım. Sitemizdeki bazı eski .aspx sayfalarında gerçek kontroller olmaksızın kodlanmıştır, ancak .aspx dosyalarıdır, bu yüzden modülüm talep edildiğinde çalışır.

Modem işleyicim, PostRequestHandlerExecute öğesine eklenmiştir, bu yüzden istekte bulunanın geri gönderilmesinin daha önce belirlenmiş olması gerektiğine inanıyorum.

Başlık etiketinde hangi dizgeyi varsa ayıklayabilmem gerekir.

Yani

<title>Chunky Bacon</title> 

eğer nihai hale HTML istekte gönderilir. Sonra "Chunky Bacon" istiyorum.

Fikirler?

+0

siz "etiketinde ne olursa olsun dize özü" ne anlama geliyor? Yanıtın talep sahibine geri gönderilmeye çalışılmaya mı çalışıyorsunuz? Ne yapmaya çalıştığın belli değil. – NerdFury

+0

Üzgünüm, bir kod bloğu üzerine yerleştirmediğim sürece HTML etiketimin görünmeyeceğini unuttum. Yanıtı işlemeye gerek yok, sadece başlık etiketinin içindeki dizeyi ayıkla. – spilliton

+0

Açıklığa kavuşturmak için, içeriği yanıttan veya etiketin içeriğinden ayrıştırılmaya çalışılıyor mu? –

cevap

22

Eğlenceli küçük bir meydan okuma.

StreamWatcher.cs

public class StreamWatcher : Stream 
    { 
     private Stream _base; 
     private MemoryStream _memoryStream = new MemoryStream(); 

     public StreamWatcher(Stream stream) 
     { 
      _base = stream; 
     } 

     public override void Flush() 
     { 
      _base.Flush(); 
     } 

     public override int Read(byte[] buffer, int offset, int count) 
     { 
      return _base.Read(buffer, offset, count); 
     } 

     public override void Write(byte[] buffer, int offset, int count) 
     { 
      _memoryStream.Write(buffer, offset, count); 
      _base.Write(buffer, offset, count); 
     } 

     public override string ToString() 
     { 
      return Encoding.UTF8.GetString(_memoryStream.ToArray()); 
     } 

     #region Rest of the overrides 
     public override bool CanRead 
     { 
      get { throw new NotImplementedException(); } 
     } 

     public override bool CanSeek 
     { 
      get { throw new NotImplementedException(); } 
     } 

     public override bool CanWrite 
     { 
      get { throw new NotImplementedException(); } 
     } 

     public override long Seek(long offset, SeekOrigin origin) 
     { 
      throw new NotImplementedException(); 
     } 

     public override void SetLength(long value) 
     { 
      throw new NotImplementedException(); 
     } 

     public override long Length 
     { 
      get { throw new NotImplementedException(); } 
     } 

     public override long Position 
     { 
      get 
      { 
       throw new NotImplementedException(); 
      } 
      set 
      { 
       throw new NotImplementedException(); 
      } 
     } 
     #endregion 
    } 

TitleModule.cs

public class TitleModule : IHttpModule 
{ 
    public void Dispose() 
    { 
    } 

    private static Regex regex = new Regex(@"(?<=<title>)[\w\s\r\n]*?(?=</title)", RegexOptions.Compiled | RegexOptions.IgnoreCase); 
    private StreamWatcher _watcher; 
    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += (o, e) => 
     { 
      _watcher = new StreamWatcher(context.Response.Filter); 
      context.Response.Filter = _watcher; 
     }; 


     context.EndRequest += (o, e) => 
     { 
      string value = _watcher.ToString(); 
      Trace.WriteLine(regex.Match(value).Value.Trim()); 
     }; 
    } 
} 
+0

istiyorum Chunky Bacon yapar Yani, teşekkür Broseph! Hala çok şaşırdım bu çok fazla kod satırını gerçekleştirmek için ... – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/21367/">spilliton</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Mükemmel çözüm! – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/46739/">gljivar</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">4.6.1 AFAIK ile NotImplementedException öğesini yükselten yöntemleri uygulamanız gerekir. Bunu yapmanın en kolay yolu tabii ki _memoryStream – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">3<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>olan HttpResponse filtreler oluşturarak bahsediyor 4GuysFromRolla ilgili bir makale vardır: İşte </p> <p></p> kod temelde passi'den önce cevabı işleyen akışlar Son çıktı akışına (bir ara kesiciye) doğru. <p></p> <p><a href="http://aspnet.4guysfromrolla.com/articles/120308-1.aspx" rel="nofollow noreferrer">http://aspnet.4guysfromrolla.com/articles/120308-1.aspx</a></p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/1380760">kaynak</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2009-09-04 18:14:25</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/6146/">NerdFury</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Cool'a yapılan tüm çağrıları ertelemek, bir çözüm ararken google'da bunlardan birazcık okudum, bunlardan birini yazmanın temel amacı HTML'yi işlemek gibi görünüyor. gönderilmeden önce gönderilir. Manipülasyon yapmadığım ve sadece HTML'ye erişebildiğim için bunun çok fazla olacağını düşündüm, ama eğer tek yol buysa ... – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/21367/">spilliton</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048964"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Son soru </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://tr.uwenku.com/question/p-enkrmlmx-m.html" target="_blank" title="parametre paketinde her öğe üzerinde işlevini uygulayın"> parametre paketinde her öğe üzerinde işlevini uygulayın </a> </li> <li class="side_article_list_item"> 2. <a href="http://tr.uwenku.com/question/p-kstlordn-g.html" target="_blank" title="Kayan nokta sayısını Perl'deki bir hex dizesine nasıl dönüştürebilirim?"> Kayan nokta sayısını Perl'deki bir hex dizesine nasıl dönüştürebilirim? </a> </li> <li class="side_article_list_item"> 3. <a href="http://tr.uwenku.com/question/p-mgxhnobc-x.html" target="_blank" title="Azure Cosmos DB Saklı Yordamları nasıl hata ayıklanır?"> Azure Cosmos DB Saklı Yordamları nasıl hata ayıklanır? </a> </li> <li class="side_article_list_item"> 4. <a href="http://tr.uwenku.com/question/p-cisyqqwk-r.html" target="_blank" title="Hata NgZone"> Hata NgZone </a> </li> <li class="side_article_list_item"> 5. <a href="http://tr.uwenku.com/question/p-ddkxgrwq-x.html" target="_blank" title="Derleyici eklemeden önce derleyici otomatik şablon parametresini neden alamıyor?"> Derleyici eklemeden önce derleyici otomatik şablon parametresini neden alamıyor? </a> </li> <li class="side_article_list_item"> 6. <a href="http://tr.uwenku.com/question/p-zdeyklsi-bb.html" target="_blank" title="Bir listedeki tüm matrisleri R"> Bir listedeki tüm matrisleri R </a> </li> <li class="side_article_list_item"> 7. <a href="http://tr.uwenku.com/question/p-vzucnynt-g.html" target="_blank" title="Zaman aşımıyla web bildirimi oluştur"> Zaman aşımıyla web bildirimi oluştur </a> </li> <li class="side_article_list_item"> 8. <a href="http://tr.uwenku.com/question/p-xooqydds-ba.html" target="_blank" title="Blockchain tek bağlantılı bir listedir?"> Blockchain tek bağlantılı bir listedir? </a> </li> <li class="side_article_list_item"> 9. <a href="http://tr.uwenku.com/question/p-sznpemjv-g.html" target="_blank" title="Proxy API çağrıları çerezle çağrılıyor"> Proxy API çağrıları çerezle çağrılıyor </a> </li> <li class="side_article_list_item"> 10. <a href="http://tr.uwenku.com/question/p-mmhxhvtg-z.html" target="_blank" title="Elonelli"> Elonelli </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> İlgili konular</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">İlgili sorun yok^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://tr.uwenku.com/contact">Bize ulaşın</a></li> <li>© 2020 TR.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>