<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.dotnet6.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Erik Lenaerts</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/default.aspx</link><description>Do, or do not. There is no try. - Yoda </description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Microsoft : from idea to release</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/08/29/microsoft-from-idea-to-release.aspx</link><pubDate>Fri, 29 Aug 2008 19:37:21 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1549</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1549</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/08/29/microsoft-from-idea-to-release.aspx#comments</comments><description>&lt;p&gt;Ever wondered where microsoft stores its code while it goes from idea to release stages? Have a look at this diagram:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/Microsoftfromideatorelease_1311D/clip_image001_3_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="141" alt="clip_image001_3" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/Microsoftfromideatorelease_1311D/clip_image001_3_thumb.jpg" width="677" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1549" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Visual Studio discovery does not detect my WCF Service</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/08/27/visual-studio-discovery-does-not-detect-my-wcf-service.aspx</link><pubDate>Wed, 27 Aug 2008 07:18:05 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1543</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1543</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/08/27/visual-studio-discovery-does-not-detect-my-wcf-service.aspx#comments</comments><description>&lt;p&gt;Recently I needed to create a windows service application for one of my customers and I decided to use WCF for both incomming as outgoing communication mechanism. The problem I had was that I could not discover any WCF services in my solution. Only WCF service created on the WCF Project templates where discovered but hand crafted WCF services based on any other project type (a regular class library) where not detected by the Visual Studio discovery system.&lt;/p&gt;  &lt;p&gt;After a while I found out where the problem lies, but I&amp;#39;ll guide you through some steps here to reproduce the issue and the solution.&lt;/p&gt;  &lt;p&gt;Create a new console project and add 2 projects to the solution; one WCF Service Library project and one regular Class Library.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="338" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_1.png" width="529" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Copy the following 3 files (App.config, IService1.cs and Service1.cs) to the class library project. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_6.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="366" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_2.png" width="297" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Reconfigure the App.config from the Class Library project so it uses a different Service Address.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_8.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="179" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_3.png" width="669" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Add 2 &lt;strong&gt;References&lt;/strong&gt; to the Class Library project (System.Runtime.Serialization and System.ServiceModel)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_10.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="238" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_4.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Build the solution. Add a &lt;strong&gt;Service Reference&lt;/strong&gt; to the Test console project and click on the Discover button.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_12.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="362" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_5.png" width="431" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The result of the discovery is only one WCF Service, the one from the WCFLibrary project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_14.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="456" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_6.png" width="565" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Now where is my other WCF service???&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To fix this, open the ClassLibrary.csproj file in notepad and add the following xml element&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;ProjectTypeGuids&amp;gt;{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&amp;lt;/ProjectTypeGuids&amp;gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_16.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="232" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_7.png" width="698" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When going back to Visual Studio, it will probably ask you to reload the project which you just accept. Rebuild the solution and try to add a new Service Reference.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_20.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="409" alt="image" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/VisualStudiodiscoverydoesnotdetectmyWCFS_8332/image_thumb_9.png" width="524" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;voila, the 2 WCF services appear !&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1543" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/WCF/default.aspx">WCF</category></item><item><title>Practice your LINQ expressions</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/04/16/practice-your-linq-expressions.aspx</link><pubDate>Wed, 16 Apr 2008 07:14:10 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1450</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1450</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/04/16/practice-your-linq-expressions.aspx#comments</comments><description>&lt;p align="justify"&gt;Reading through my daily blogs I&amp;#39;ve stumbled upon this very nice LINQ application. It basically allows you to write LINQ statements and execute them right away.&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.linqpad.net/" href="http://www.linqpad.net/"&gt;http://www.linqpad.net/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.linqpad.net/linqpadscreen.png"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.linqpad.net/linqpadscreen.png"&gt;&lt;img src="http://www.linqpad.net/linqpadscreen.png" width="240" height="201" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1450" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Microsoft Office Interactive Developer Map</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/02/26/microsoft-office-interactive-developer-map.aspx</link><pubDate>Wed, 27 Feb 2008 06:48:08 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1182</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1182</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/02/26/microsoft-office-interactive-developer-map.aspx#comments</comments><description>&lt;p&gt;sweet wpf based application from Microsoft deployed via click once. Besides the usefullness of the application, I think its a good demo to show to customers what wpf and click once is about.&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/en-us/office/bb497969.aspx" href="http://msdn2.microsoft.com/en-us/office/bb497969.aspx"&gt;http://msdn2.microsoft.com/en-us/office/bb497969.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1182" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Microsoft+Office/default.aspx">Microsoft Office</category></item><item><title>Graffiti</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/01/09/graffiti.aspx</link><pubDate>Wed, 09 Jan 2008 12:36:52 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1164</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1164</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2008/01/09/graffiti.aspx#comments</comments><description>&lt;p&gt;After using/implementing some CMS systems and building one or two of our own I can tell you that it ain&amp;#39;t a simple thing. Whats a good CMS? Well it should be:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;easy to work with&lt;/li&gt; &lt;li&gt;extensible&lt;/li&gt; &lt;li&gt;customizable in appearance (themes)&lt;/li&gt; &lt;li&gt;easy to maintain and administer&lt;/li&gt; &lt;li&gt;...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;well, guess the creators of Community Server came up with it : &lt;a title="http://graffiticms.com/" href="http://graffiticms.com/"&gt;http://graffiticms.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;check it out and judge by yourself &lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1164" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category></item><item><title>Server Side Printing in .Net</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/10/08/server-side-printing-in-net.aspx</link><pubDate>Mon, 08 Oct 2007 09:07:13 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1137</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1137</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/10/08/server-side-printing-in-net.aspx#comments</comments><description>&lt;p&gt;We have been looking for a long time for a desent Server Side Printing solution in our .Net development projects. &lt;/p&gt; &lt;p&gt;Basically printing is a breeze when developing in a windows client environment. However printing from a server side is much more difficult. Let&amp;#39;s consider printing from&amp;nbsp;web sites.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Printing directly from the web site &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Printing directly from the code excecuted by the web server doesn&amp;#39;t seem like a good idea. Firstly, server side web pag execution should be kept as quick as possible. Only then you can get good scaling for your web site. Secondly, web page execution runs usually under a strict security account like the Network Service which might not be sufficient. Lastly, when printing requests would increase the web server migh choke and you would lose print outs.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Printing from a service&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The better solution is to print from an external service. Whenever a print request is launched on a web page, the server side code would instruct the external print service for a new print assignment.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Document formats&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In general, we want to print different type of documents ranging from simpel text files to word documents, images, pdf&amp;#39;s etc. In my opinion it is best to convert all these formats to PDF before printing. This ensures a good printing baseline as printing HTML&amp;nbsp;for example, doesn&amp;#39;t offer good paper output settings. Microsoft has introduced the &lt;a href="http://www.microsoft.com/whdc/xps/default.mspx"&gt;XPS paper spec&lt;/a&gt;&amp;nbsp;which looks like a good alternative from Redmond, however it still need to catch up on the industry.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Products&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;3-Heights™ PDF Printer Service&lt;/u&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This product seems great; I tested it and it works like a charm and support of it is excelent. Basically you define some drop folders and assign printers to these, simple :). Pricing starts at $1000.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a title="http://www.pdf-tools.com/asp/products.asp?name=PRNR&amp;amp;type=svc" href="http://www.pdf-tools.com/asp/products.asp?name=PRNR&amp;amp;type=svc"&gt;http://www.pdf-tools.com/asp/products.asp?name=PRNR&amp;amp;type=svc&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;u&gt;Adobe PDF Print Engine&lt;/u&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Haven&amp;#39;t really looked at this but it seems that adobe found a good solution to the problem described above. I&amp;#39;m not sure but I expect this product to be in a higher price range.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a title="http://www.adobe.com/products/pdfprintengine/overview.html" href="http://www.adobe.com/products/pdfprintengine/overview.html"&gt;http://www.adobe.com/products/pdfprintengine/overview.html&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1137" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category></item><item><title>Unit Testing in Visual Studio 2008 Pro edition</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/31/unit-testing-in-visual-studio-2008-pro-edition.aspx</link><pubDate>Tue, 31 Jul 2007 15:51:55 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1114</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1114</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/31/unit-testing-in-visual-studio-2008-pro-edition.aspx#comments</comments><description>&lt;p&gt;From the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/26/vs-2008-and-net-3-5-beta-2-released.aspx"&gt;blog posting of Scott Guthrie&lt;/a&gt;, Unit Testing will be available on the Pro edition of Visual Studio 2008 instead of only on the Team Suite Editions.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Unit testing support is now much faster and&amp;nbsp;included in VS Professional (and no longer just VSTS)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/nnaderi/archive/2007/05/11/new-unit-testing-features-in-orcas-part-1.aspx"&gt;Read here&lt;/a&gt; for more info on Visual Studio 2008 Unit Testing.&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1114" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category></item><item><title>Run a Http Response Filter together with an Ajax Update Panel</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/21/run-a-http-response-filter-together-with-an-ajax-update-panel.aspx</link><pubDate>Sat, 21 Jul 2007 12:13:40 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1101</guid><dc:creator>ErikL</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1101</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/21/run-a-http-response-filter-together-with-an-ajax-update-panel.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;This post continues&amp;nbsp;from&amp;nbsp;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/19/translate-content-using-a-httpresponse-filter.aspx"&gt;part one&lt;/a&gt;. In this previous post we created a Http Response Filter that translated content based on a Token replacement technique. &lt;/p&gt; &lt;p&gt;In this article we&amp;#39;ll discuss how to apply this technique when you are using an Ajax Update Panel. The problem with the update panel is that&amp;nbsp;the&amp;nbsp;XmlHttp request&amp;nbsp;made to the server&amp;nbsp;is responded with partial html fragments.&amp;nbsp;Nothing wrong with that in essence, however, our Http Response Filter from part&amp;nbsp;one requires a full html document, more exactly it looks for the end html tag (&amp;lt;/html&amp;gt;) to know when all of the content has been received.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Ajax update panel Specifics&lt;/h3&gt; &lt;p&gt;Requests made by Ajax for the Updatepanel are a bit different than regular requests more exactly:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;They are of content-type &amp;quot;text/plain&amp;quot;  &lt;li&gt;They are requested with a Request Header &amp;quot;x-microsoftajax&amp;quot; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Also the responses server by the Ajax server side code are different:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;They&amp;nbsp;are not wrapped in &amp;lt;html&amp;gt; tags because they are partial html fragments  &lt;li&gt;They contain a &amp;#39;special header&amp;#39; (read &lt;a href="http://weblogs.asp.net/leftslipper/archive/2007/02/26/sys-webforms-pagerequestmanagerparsererrorexception-what-it-is-and-how-to-avoid-it.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://www.manuelabadia.com/blog/PermaLink,guid,31a01aba-565d-46ab-b8af-bde3352905c9.aspx"&gt;here&lt;/a&gt; for very useful info).  &lt;li&gt;They contain two parts, one part with the content and another one containing things like the viewstate .&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Mmh, so if we don&amp;#39;t have any end html tag, how will we know when we have received all of our content? Well the answer lies in the &amp;quot;special header&amp;quot; which looks like :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Header: &lt;/strong&gt;Length + ‘|’ + type + ‘|’ + id + ‘|’&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Body:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;html content&amp;nbsp;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Footer&lt;/strong&gt;: ‘|’&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The first part in this header contains the length of the body so that&amp;#39;s really interesting. As you might recall from the previous part, ASP.Net serves our data in chunks of +-28K by calling the write method several times. So, we&amp;#39;ll keep on collecting the data until we have received as much as bytes as specified in the length.&lt;/p&gt; &lt;p&gt;If you intercept the response of an Update panel by using for example &lt;a href="http://www.fiddlertool.com/"&gt;Fiddler&lt;/a&gt;, you&amp;#39;ll notice that besides the content there&amp;#39;s also a second part that contains&amp;nbsp;data like the viewstate. This is surely not something you want to translate. So, our goal is to only process part one &amp;quot;the content&amp;quot;.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;So, after all of the content has been collected, we can translate the tokens. However, when changing the content, the length of it will change as well. So, we need to recalculate the new length and set it accordingly into the special header.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;The filter&lt;/h3&gt; &lt;p&gt;Knowing all of this, we can start by creating our filter.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;The&amp;nbsp;&amp;lt;c&amp;gt;AjaxTranslationFilter&amp;lt;/c&amp;gt;&amp;nbsp;class&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;AjaxTranslationFilter&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;HttpFilter &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;StringBuilder&amp;nbsp;_responseHtml&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&amp;nbsp;int&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_contentLength&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;0&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&amp;nbsp;bool&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_partOne&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;true&lt;/span&gt;&lt;span style="color:gray;"&gt;;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Initializes&amp;nbsp;a&amp;nbsp;new&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&amp;lt;see&amp;nbsp;cref=&amp;quot;AjaxTranslationFilter&amp;quot;/&amp;gt;&amp;nbsp;class. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;stream&amp;quot;&amp;gt;The&amp;nbsp;stream&amp;nbsp;on&amp;nbsp;which&amp;nbsp;the&amp;nbsp;filter&amp;nbsp;will&amp;nbsp;work.&amp;lt;/param&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;AjaxTranslationFilter&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;Stream&amp;nbsp;stream&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;base&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;stream&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;When&amp;nbsp;overridden&amp;nbsp;in&amp;nbsp;a&amp;nbsp;derived&amp;nbsp;class,&amp;nbsp;writes&amp;nbsp;a&amp;nbsp;sequence&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream&amp;nbsp;and&amp;nbsp;advances&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// the&amp;nbsp;current&amp;nbsp;position&amp;nbsp;within&amp;nbsp;this&amp;nbsp;stream&amp;nbsp;by&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;written. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;buffer&amp;quot;&amp;gt;An&amp;nbsp;array&amp;nbsp;of&amp;nbsp;bytes.&amp;nbsp;This&amp;nbsp;method&amp;nbsp;copies&amp;nbsp;count&amp;nbsp;bytes&amp;nbsp;from&amp;nbsp;buffer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream.&amp;lt;/param&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;offset&amp;quot;&amp;gt;The&amp;nbsp;zero-based&amp;nbsp;byte&amp;nbsp;offset&amp;nbsp;in&amp;nbsp;buffer&amp;nbsp;at&amp;nbsp;which&amp;nbsp;to&amp;nbsp;begin&amp;nbsp;copying&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream.&amp;lt;/param&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;count&amp;quot;&amp;gt;The&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;be&amp;nbsp;written&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream.&amp;lt;/param&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;override&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Write&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;&lt;span style="color:black;"&gt;[]&amp;nbsp;buffer&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;offset&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;count&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;newContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;null&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;this&amp;nbsp;method&amp;nbsp;is&amp;nbsp;potentially&amp;nbsp;called&amp;nbsp;several&amp;nbsp;times&amp;nbsp;by&amp;nbsp;ASP.NET &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;The&amp;nbsp;buffer&amp;nbsp;is&amp;nbsp;not&amp;nbsp;written&amp;nbsp;at&amp;nbsp;once,&amp;nbsp;but&amp;nbsp;depending&amp;nbsp;on&amp;nbsp;the&amp;nbsp;size,&amp;nbsp;in&amp;nbsp;blocks&amp;nbsp;of&amp;nbsp;27~29&amp;nbsp;Kbytes &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Since&amp;nbsp;this&amp;nbsp;is&amp;nbsp;an&amp;nbsp;Ajax&amp;nbsp;call,&amp;nbsp;we&amp;#39;ll&amp;nbsp;find&amp;nbsp;the&amp;nbsp;total&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;in&amp;nbsp;the&amp;nbsp;&amp;#39;special&amp;#39;&amp;nbsp;Ajax&amp;nbsp;header &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Info &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;*&amp;nbsp;http://weblogs.asp.net/leftslipper/archive/2007/02/26/sys-webforms-pagerequestmanagerparsererrorexception-what-it-is-and-how-to-avoid-it.aspx &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;*&amp;nbsp;http://www.manuelabadia.com/blog/SyndicationService.asmx/GetRssCategory?categoryName=Ajax&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;get&amp;nbsp;buffer&amp;nbsp;content &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;strBuffer&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Text.UTF8Encoding.UTF8.GetString&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;buffer&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;offset&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;count&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;This&amp;nbsp;filter&amp;nbsp;is&amp;nbsp;called&amp;nbsp;in two parts&amp;nbsp;but&amp;nbsp;only&amp;nbsp;the&amp;nbsp;first&amp;nbsp;part&amp;nbsp;contains&amp;nbsp;content&amp;nbsp;that&amp;nbsp;could&amp;nbsp;be&amp;nbsp;translated &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_partOne&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;determine&amp;nbsp;the&amp;nbsp;content&amp;nbsp;length&amp;nbsp;during&amp;nbsp;first&amp;nbsp;run &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_contentLength&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;0&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Check&amp;nbsp;for&amp;nbsp;a&amp;nbsp;valid&amp;nbsp;Ajax&amp;nbsp;header &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Regex&amp;nbsp;regEx&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Regex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:darkred;"&gt;@&amp;quot;^(?&amp;lt;length&amp;gt;\d+)\|[^\|]*\|[^\|]*\|&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;RegexOptions.Singleline&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Match&amp;nbsp;m&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;regEx.Match&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;strBuffer&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;m.Success&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:gray;"&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&lt;span style="color:black;"&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Read the&amp;nbsp;length&amp;nbsp;&lt;/span&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Group&amp;nbsp;group&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;m.Groups[&amp;quot;length&amp;quot;]&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_contentLength&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Convert.ToInt32&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;group.Value&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;initialise&amp;nbsp;the&amp;nbsp;StringBuilder&amp;nbsp;(we&amp;nbsp;&amp;nbsp;assume&amp;nbsp;that&amp;nbsp;translations&amp;nbsp;increase &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;the&amp;nbsp;size&amp;nbsp;by&amp;nbsp;20% &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_responseHtml&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;StringBuilder&lt;/span&gt;&lt;span style="color:gray;"&gt;((&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;)(&lt;/span&gt;&lt;span style="color:black;"&gt;_contentLength&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;*&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;1.2&lt;/span&gt;&lt;span style="color:gray;"&gt;)); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;SystemException&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:darkred;"&gt;&amp;quot;Unable&amp;nbsp;to&amp;nbsp;parse&amp;nbsp;content&amp;nbsp;length&amp;nbsp;from&amp;nbsp;Ajax&amp;nbsp;header&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Add&amp;nbsp;buffer&amp;nbsp;to&amp;nbsp;total&amp;nbsp;buffer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_responseHtml.Append&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;strBuffer&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Is&amp;nbsp;all&amp;nbsp;data&amp;nbsp;received? &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_responseHtml.Length&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_contentLength&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//we&amp;nbsp;have&amp;nbsp;received&amp;nbsp;all&amp;nbsp;the&amp;nbsp;data&amp;nbsp;by&amp;nbsp;now,&amp;nbsp;so&amp;nbsp;we&amp;nbsp;can&amp;nbsp;translate&amp;nbsp;the&amp;nbsp;content&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&amp;nbsp;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;ajaxContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_responseHtml.ToString&lt;/span&gt;&lt;span style="color:gray;"&gt;(); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Translate&amp;nbsp;the&amp;nbsp;tokens in the html&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;translatedContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;TranslateContent&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;ajaxContent&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Calculate&amp;nbsp;new&amp;nbsp;content&amp;nbsp;length&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;newContentLength&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;translatedContent.Length&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;-&amp;nbsp;(&lt;/span&gt;&lt;span style="color:black;"&gt;_responseHtml.Length&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_contentLength&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Set&amp;nbsp;new content length&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;Regex&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;regex2&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new &lt;span style="color:blue;"&gt;Regex&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="color:darkred;"&gt;@&amp;quot;^(?&amp;lt;length&amp;gt;\d+)(?&amp;lt;rest&amp;gt;\|[^\|]*\|[^\|]*\|)&amp;quot;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;RegexOptions.Singleline&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:gray;"&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:black;"&gt;newContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;regEx2.Replace&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;translatedContent&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;newContentLength&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;+&amp;nbsp;&lt;/span&gt;&lt;span style="color:darkred;"&gt;&amp;quot;${rest}&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;translatedContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;!=&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;&lt;span style="color:black;"&gt;[]&amp;nbsp;data&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Text.UTF8Encoding.UTF8.GetBytes&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;newContent&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Write&amp;nbsp;to&amp;nbsp;the&amp;nbsp;stream &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;BaseStream.Write&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;data&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;0&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;data.Length&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_partOne&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;false&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;After&amp;nbsp;the&amp;nbsp;first&amp;nbsp;part&amp;nbsp;has&amp;nbsp;been&amp;nbsp;processed,&amp;nbsp;just&amp;nbsp;forward&amp;nbsp;the&amp;nbsp;other&amp;nbsp;content&amp;nbsp;to&amp;nbsp;the&amp;nbsp;browser. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;this&amp;nbsp;can&amp;nbsp;also&amp;nbsp;occur&amp;nbsp;in&amp;nbsp;multiple&amp;nbsp;times&amp;nbsp;if&amp;nbsp;this&amp;nbsp;&amp;#39;rest&amp;#39;-data&amp;nbsp;is&amp;nbsp;totally&amp;nbsp;larger&amp;nbsp;than&amp;nbsp;+-28K &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;BaseStream.Write&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;buffer&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;offset&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;count&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/code&gt; &lt;span style="color:black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;When to&amp;nbsp;register the Filter&lt;/h3&gt; &lt;p&gt;We know that the content contains 2 parts. The first part where the actual content is provided and in the second part stuff like viewstate and client side event binding is produced. As mentioned, for our translations, we are only interested in the first part.&lt;/p&gt; &lt;p&gt;If we look at the points in time when these two parts are&amp;nbsp;rendered by Ajax&amp;nbsp;then we can see the following order:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;PreRequestHandlerExecute&lt;br /&gt;- - Part One&lt;br /&gt;PostRequestHandlerExecute&lt;br /&gt;ReleaseRequestState&lt;br /&gt;- - Part two&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So I figured, I just unregister the filter on the PostRequestHandlerExecute event, but I didn&amp;#39;t found any way to do that. Because of this, I had to deal with the concept of part one and two in my filter code. &lt;/p&gt; &lt;p&gt;As opposed to HtmlTranslationFilter of my &lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/19/translate-content-using-a-httpresponse-filter.aspx"&gt;previous article&lt;/a&gt;&amp;nbsp;we can&amp;#39;t register the Filter on the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpapplication.releaserequeststate.aspx"&gt;ReleaseRequestState&lt;/a&gt;, since it would be too late to receive Part One. However when we register our filter before the Page/Control Request Handler (&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/17/don-t-register-your-http-response-filter-too-soon.aspx"&gt;as explained here&lt;/a&gt;), then we don&amp;#39;t know our content type and we can&amp;#39;t check for &amp;quot;text/plain&amp;quot; content types. Too solve this dilemma, we check to register our AjaxTranslationFilter based on the Header=x-microsoftajax. Since the header is part of the request we can register our filter at any point in time before the PreRequestHandlerExecute in our case the BeginRequest:&lt;/p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Handles&amp;nbsp;the&amp;nbsp;BeginRequest&amp;nbsp;event&amp;nbsp;of&amp;nbsp;the&amp;nbsp;httpApplication. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;httpApplication_BeginRequest&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;object&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;sender&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;EventArgs&amp;nbsp;e&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Check&amp;nbsp;if&amp;nbsp;we&amp;nbsp;need&amp;nbsp;an&amp;nbsp;AjaxTranslationFilter. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;the&amp;nbsp;check&amp;nbsp;requires&amp;nbsp;an&amp;nbsp;Request&amp;nbsp;header,&amp;nbsp;therefore&amp;nbsp;we&amp;nbsp;can&amp;nbsp;register&amp;nbsp;this&amp;nbsp;filter&amp;nbsp;early &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;if&amp;nbsp;we&amp;nbsp;would&amp;nbsp;register&amp;nbsp;it&amp;nbsp;too&amp;nbsp;late&amp;nbsp;then&amp;nbsp;we&amp;nbsp;would&amp;nbsp;miss&amp;nbsp;out&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;some&amp;nbsp;data&amp;nbsp;that&amp;nbsp;is&amp;nbsp;handled&amp;nbsp;by&amp;nbsp;the&amp;nbsp;Ajax&amp;nbsp;ScriptModule&amp;nbsp;HttpModule &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(!&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;.IsNullOrEmpty&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Request.Headers[&amp;quot;x-microsoftajax&amp;quot;]&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;filter&amp;nbsp;and&amp;nbsp;insert&amp;nbsp;it&amp;nbsp;onto&amp;nbsp;the&amp;nbsp;page &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;This&amp;nbsp;filter&amp;nbsp;will&amp;nbsp;later&amp;nbsp;on,&amp;nbsp;translate&amp;nbsp;all&amp;nbsp;content &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;AjaxTranslationFilter&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&lt;/span&gt;&lt;span style="color:gray;"&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/code&gt; &lt;p&gt;To execution chain is then as this:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;BeginRequest&lt;br /&gt;- - Ajax Filter Registered&lt;br /&gt;PreRequestHandlerExecute&lt;br /&gt;- - Ajax Filter - Part One&lt;br /&gt;PostRequestHandlerExecute&lt;br /&gt;ReleaseRequestState&lt;br /&gt;- - Ajax Filter - Part two&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;- Enjoy&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1101" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/ASP.Net/default.aspx">ASP.Net</category></item><item><title>Translate content using a HttpResponse filter</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/19/translate-content-using-a-httpresponse-filter.aspx</link><pubDate>Thu, 19 Jul 2007 15:36:08 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1096</guid><dc:creator>ErikL</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1096</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/19/translate-content-using-a-httpresponse-filter.aspx#comments</comments><description>&lt;p&gt;Suppose you want to translate content by replacing tokens with new words that you for example maintain in a central location (db). For maximum flexibility, you decided to create a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpresponse.filter.aspx"&gt;Http Response Filter&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Basically you write a Http response Filter like below. Note that the filter is based on base class&amp;nbsp;HttpFilter &lt;a href="http://www.ondotnet.com/pub/a/dotnet/2003/10/20/httpfilter.html"&gt;from Ben Lowery&lt;/a&gt;&amp;nbsp;which you can &lt;a href="http://www.blowery.org/code/HttpFilteringExamples.zip"&gt;download here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;HtmlTranslationFilter&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;HttpFilter &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Stream&amp;nbsp;_stream&lt;/span&gt;&lt;span style="color:gray;"&gt;;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;StringBuilder&amp;nbsp;_responseHtml&lt;/span&gt;&lt;span style="color:gray;"&gt;;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Initializes&amp;nbsp;a&amp;nbsp;new&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&amp;lt;see&amp;nbsp;cref=&amp;quot;HtmlTranslationFilter&amp;quot;/&amp;gt;&amp;nbsp;class. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;stream&amp;quot;&amp;gt;The&amp;nbsp;stream&amp;nbsp;on&amp;nbsp;which&amp;nbsp;the&amp;nbsp;filter&amp;nbsp;will&amp;nbsp;work.&amp;lt;/param&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;HtmlTranslationFilter&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;Stream&amp;nbsp;stream&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;base&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;stream&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_responseHtml&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;StringBuilder&lt;/span&gt;&lt;span style="color:gray;"&gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_stream&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;stream&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;When&amp;nbsp;overridden&amp;nbsp;in&amp;nbsp;a&amp;nbsp;derived&amp;nbsp;class,&amp;nbsp;writes&amp;nbsp;a&amp;nbsp;sequence&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream&amp;nbsp;and&amp;nbsp;advances&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// the&amp;nbsp;current&amp;nbsp;position&amp;nbsp;within&amp;nbsp;this&amp;nbsp;stream&amp;nbsp;by&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;written. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;buffer&amp;quot;&amp;gt;An&amp;nbsp;array&amp;nbsp;of&amp;nbsp;bytes.&amp;nbsp;This&amp;nbsp;method&amp;nbsp;copies&amp;nbsp;count&amp;nbsp;bytes&amp;nbsp;from&amp;nbsp;buffer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream.&amp;lt;/param&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;offset&amp;quot;&amp;gt;The&amp;nbsp;zero-based&amp;nbsp;byte&amp;nbsp;offset&amp;nbsp;in&amp;nbsp;buffer&amp;nbsp;at&amp;nbsp;which&amp;nbsp;to&amp;nbsp;begin&amp;nbsp;copying&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream.&amp;lt;/param&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;count&amp;quot;&amp;gt;The&amp;nbsp;number&amp;nbsp;of&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;be&amp;nbsp;written&amp;nbsp;to&amp;nbsp;the&amp;nbsp;current&amp;nbsp;stream.&amp;lt;/param&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;override&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Write&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;&lt;span style="color:black;"&gt;[]&amp;nbsp;buffer&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;offset&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;count&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;this&amp;nbsp;method&amp;nbsp;is&amp;nbsp;potentially&amp;nbsp;called&amp;nbsp;several&amp;nbsp;times&amp;nbsp;by&amp;nbsp;ASP.NET &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;The&amp;nbsp;buffer&amp;nbsp;is&amp;nbsp;not&amp;nbsp;written&amp;nbsp;at&amp;nbsp;once,&amp;nbsp;but&amp;nbsp;depending&amp;nbsp;on&amp;nbsp;the&amp;nbsp;size,&amp;nbsp;in&amp;nbsp;blocks&amp;nbsp;of&amp;nbsp;27~29&amp;nbsp;Kbytes &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;So&amp;nbsp;the&amp;nbsp;big&amp;nbsp;question&amp;nbsp;is&amp;nbsp;when&amp;nbsp;do&amp;nbsp;we&amp;nbsp;know&amp;nbsp;that&amp;nbsp;we&amp;nbsp;have&amp;nbsp;received&amp;nbsp;all&amp;nbsp;the&amp;nbsp;content? &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;if&amp;nbsp;the&amp;nbsp;content&amp;nbsp;is&amp;nbsp;Html,&amp;nbsp;then&amp;nbsp;we&amp;nbsp;scan&amp;nbsp;for&amp;nbsp;the&amp;nbsp;&amp;lt;/html&amp;gt;&amp;nbsp;tag&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Get&amp;nbsp;string&amp;nbsp;from&amp;nbsp;the&amp;nbsp;buffer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;strBuffer&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Text.UTF8Encoding.UTF8.GetString&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;buffer&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;offset&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;count&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;--------------------------------- &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Wait&amp;nbsp;for&amp;nbsp;the&amp;nbsp;closing&amp;nbsp;&amp;lt;/html&amp;gt;&amp;nbsp;tag &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;--------------------------------- &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Regex&amp;nbsp;eof&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Regex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:darkred;"&gt;&amp;quot;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;RegexOptions.IgnoreCase&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(!&lt;/span&gt;&lt;span style="color:black;"&gt;eof.IsMatch&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;strBuffer&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_responseHtml.Append&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;strBuffer&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_responseHtml.Append&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;strBuffer&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;htmlContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_responseHtml.ToString&lt;/span&gt;&lt;span style="color:gray;"&gt;(); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Translate&amp;nbsp;the&amp;nbsp;html&amp;nbsp;in&amp;nbsp;the&amp;nbsp;buffer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;translatedContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;TranslateContent&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;htmlContent&lt;/span&gt;&lt;span style="color:gray;"&gt;);&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;translatedContent&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;!=&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;&lt;span style="color:black;"&gt;[]&amp;nbsp;data&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Text.UTF8Encoding.UTF8.GetBytes&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;translatedContent&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Write&amp;nbsp;to&amp;nbsp;the&amp;nbsp;stream &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_stream.Write&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;data&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;0&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;data.Length&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/code&gt; &lt;/p&gt; &lt;p&gt;If the html send to the browser is small - let&amp;#39;s say 2 K bytes - then ASP.Net will pass the complete HTML to&amp;nbsp;our write method. However if the HTML is larger than +- 28K, then ASP.Net will call our Write method several times. With every call, we&amp;#39;ll get a chunk of the HTML content. So, if you look at the code, you&amp;#39;ll notice that we scan for the end html tag (&amp;lt;/html&amp;gt;). As long as we don&amp;#39;t saw any end html tag in the chunk of html, we save up the content into a StringBuilder object. At the end, we&amp;#39;ll find our end html tag and then we can assume that all the content is provided by ASP.Net.&lt;/p&gt; &lt;p&gt;I looked into other techniques to &amp;quot;know&amp;quot; when we have received all of the content, but I didn&amp;#39;t found one immediately. I also looked for a setting somewhere where I could change the buffer size to a value larger than 28K, but nothing found in that area either.&lt;/p&gt; &lt;p&gt;You might ask, why all the fuss to know when we have received the complete Html. Suppose you have a Token somewhere like &amp;quot;#token#&amp;quot; and by coincidence, the first chunk served by ASP.Net&amp;nbsp;ends with&amp;nbsp;&amp;quot;#to&amp;quot; and&amp;nbsp;the next chunk&amp;nbsp;starts with &amp;quot;ken#&amp;nbsp;&amp;quot;. This would eventually mess up your translation system.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Register the Filter&lt;/h3&gt; &lt;p&gt;You register the filter in a HttpModule on the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpapplication.releaserequeststate.aspx"&gt;ReleaseRequestState&lt;/a&gt; event as described &lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/17/don-t-register-your-http-response-filter-too-soon.aspx"&gt;here in my previous post&lt;/a&gt;. The ReleaseRequestState event is an event that occurs after the Page has rendered the html content and just before the filters are executed. This way we can be sure that we can pickup the ContentType&amp;nbsp;of the Response&amp;nbsp;which we&amp;#39;ll use to filter out html pages only.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;///&amp;nbsp;Handles&amp;nbsp;the&amp;nbsp;ReleaseRequestState&amp;nbsp;event&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;sender&amp;quot;&amp;gt;The&amp;nbsp;source&amp;nbsp;of&amp;nbsp;the&amp;nbsp;event.&amp;lt;/param&amp;gt; &lt;br /&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;e&amp;quot;&amp;gt;The&amp;nbsp;&amp;lt;see&amp;nbsp;cref=&amp;quot;System.EventArgs&amp;quot;/&amp;gt;&amp;nbsp;instance&amp;nbsp;containing&amp;nbsp;the&amp;nbsp;event&amp;nbsp;data.&amp;lt;/param&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;httpApplication_ReleaseRequestState&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;object&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;sender&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;EventArgs&amp;nbsp;e&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Check&amp;nbsp;if&amp;nbsp;we&amp;nbsp;need&amp;nbsp;an&amp;nbsp;HtmlTranslationFilter. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;the&amp;nbsp;check&amp;nbsp;requires&amp;nbsp;the&amp;nbsp;ContentType&amp;nbsp;which&amp;nbsp;is&amp;nbsp;only&amp;nbsp;known&amp;nbsp;when&amp;nbsp;the&amp;nbsp;content&amp;nbsp;was&amp;nbsp;rendered &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;therefore,&amp;nbsp;we&amp;nbsp;register&amp;nbsp;the&amp;nbsp;Html&amp;nbsp;filter&amp;nbsp;on&amp;nbsp;the&amp;nbsp;ReleaseRequestState&amp;nbsp;event &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;See&amp;nbsp;also:&amp;nbsp;http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/17/don-t-register-your-http-response-filter-too-soon.aspx &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.ContentType&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style="color:darkred;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;filter&amp;nbsp;and&amp;nbsp;insert&amp;nbsp;it&amp;nbsp;onto&amp;nbsp;the&amp;nbsp;page &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;This&amp;nbsp;filter&amp;nbsp;will&amp;nbsp;later&amp;nbsp;on,&amp;nbsp;translate&amp;nbsp;all&amp;nbsp;html&amp;nbsp;content &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;HtmlTranslationFilter&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&lt;/span&gt;&lt;span style="color:gray;"&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:gray;"&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/code&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In the &lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/21/run-a-http-response-filter-together-with-an-ajax-update-panel.aspx"&gt;next posting&lt;/a&gt; I&amp;#39;ll explain how to write a filter that also works with the AJax Update panel.&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1096" width="1" height="1"&gt;</description></item><item><title>Unreachable Url's in google</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/18/unreachable-url-s-in-google.aspx</link><pubDate>Wed, 18 Jul 2007 08:20:41 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1094</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1094</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/18/unreachable-url-s-in-google.aspx#comments</comments><description>&lt;p&gt;Since a while we encounter more and more problems for one of the websites I&amp;#39;m working on (&lt;a href="http://www.morres.com" target="_blank"&gt;www.morres.com&lt;/a&gt;). Somewhere in the first Quarter of 2007, the site dissapeared from the radar of Google entirely. &lt;/p&gt; &lt;p&gt;Question is, what wen&amp;#39;t wrong? We spent a great deal of the project budget into an Search Engine friendly site like:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Url rewriting  &lt;li&gt;Inclusing of industry keywords  &lt;li&gt;Meta Tags  &lt;li&gt;Correct use of propper HTML (like H1, H2, etc)  &lt;li&gt;Fully use of&amp;nbsp;alt and title attributes for hyperlinks and images  &lt;li&gt;a google friendly sitemap  &lt;li&gt;HTTP 301 redirection of alternative domain names like &lt;a href="http://www.morres.nl" target="_blank"&gt;www.morres.nl&lt;/a&gt;, etc  &lt;li&gt;&amp;nbsp;...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;All of this effort resulted into no listing in Google... a frustrating period I must say :S.&amp;nbsp;&lt;/p&gt; &lt;p&gt;I started with Google &lt;a title="Google Webmaster tools" href="https://www.google.com/webmasters/tools/siteoverview?hl=en" target="_blank"&gt;Webmaster tools&lt;/a&gt;&amp;nbsp;and verified the site by uploading a verification file. After this verification process I got lots of information from the tools.&lt;/p&gt; &lt;p&gt;On the Diagnostics page, I saw that the last &amp;quot;successful&amp;quot; crawl was like 6 months ago and the reason state was &amp;quot;We can&amp;#39;t currently access your home page because of an unreachable error&amp;quot;.&lt;/p&gt; &lt;p&gt;In the list of Unreachable Url&amp;#39;s, the home page &lt;a href="http://www.morres.com"&gt;www.morres.com&lt;/a&gt; showed up with an HTTP 500 code from a crawl a few days ago. Strangely enough, in my browser, the page &lt;a href="http://www.morres.com"&gt;www.morres.com&lt;/a&gt; just showed up fine... strange, strange. I used &lt;a href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/a&gt; to check the HTTP results codes; no HTTP 500&amp;#39;s?&lt;/p&gt; &lt;p&gt;So, I started dgging arround in news groups, blogs, etc.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Broken Links?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In my search I stumbled upon a tool &lt;a href="http://home.snafu.de/tilman/xenulink.html" target="_blank"&gt;Xenu, to report broken links on your site&lt;/a&gt;, a very usefull tool indeed. Although I found some broken links, which we fixed off course, none of the links resulted into a HTTP 500.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Canonical server name issues?&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;In &lt;a href="http://groups.google.com/group/Google_Webmaster_Help-Indexing/browse_thread/thread/ef8a3e8c7fc2eee/9670cfe4dd4803e5?lnk=gst&amp;amp;q=unreachable+URL&amp;amp;rnum=1#9670cfe4dd4803e5"&gt;this thread&lt;/a&gt;, I learned that google might access our site without the host name so &lt;a href="http://morres.com"&gt;http://morres.com&lt;/a&gt;. Lucky we can straigthen &lt;a href="http://www.smart-it-consulting.com/article.htm?node=166&amp;amp;page=127"&gt;out this problem&lt;/a&gt;&amp;nbsp;by means of an HTTP 301 (redirection) from the &lt;a href="http://morres.com"&gt;http://morres.com&lt;/a&gt; to &lt;a href="http://www.morres.com"&gt;http://www.morres.com&lt;/a&gt; on our webservers. Noneteless, this didn&amp;#39;t worked either.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Validators&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;After some additional surfing, I came to the idea to validate the HTML output from our web site.&lt;/p&gt; &lt;p&gt;I used the following validators:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://validator.w3.org/"&gt;Markup validator:&lt;/a&gt; &lt;em&gt;This is the W3C Markup Validation Service, a free service that checks Web documents in formats like HTML and XHTML for conformance to W3C Recommendations and other standards.&lt;/em&gt;  &lt;li&gt;&lt;a title="Link Checker" href="http://validator.w3.org/checklink"&gt;Link Checker&lt;/a&gt;: &lt;em&gt;Checks anchors (hyperlinks) in a HTML/XHTML document. Useful to find broken links, etc.&lt;/em&gt;  &lt;li&gt;&lt;a title="CSS Validator" href="http://jigsaw.w3.org/css-validator/"&gt;CSS Validator&lt;/a&gt;: &lt;em&gt;validates CSS stylesheets or documents using CSS stylesheets&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;We corrected some of the HTML and CSS issues (which were in my opinion very tiny little details, but hey, after a while you&amp;#39;ll try everything) again, we no notable change for Google&amp;#39;s problems.&lt;/p&gt; &lt;p&gt;The link checker is in fact similar with the tool from Xenu. I ran it on the home page and not following any 2e level links to keep the results limited. The only problem that was reported was this link:&lt;/p&gt; &lt;p&gt;&lt;a&gt;BLOCKED SCRIPThistory.go(-1)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;We provide this back button for the user in our navigation bar left from our breadcrumb. I searched the internet if this type of javascript used in an HREF could cause any troubles, however no one has complained about this. For the save side, we removed this &amp;quot;feature&amp;quot; temporary. (I actually wonder if people ever use it all). &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Spider simulator&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I wanted to know how googlebot (the spider/crawler) from google sees our pages and therefore I ran &lt;a href="http://oyoy.eu/page/spider/"&gt;this spider simulator&lt;/a&gt;. A very nice simulator and especially interesting for keyword analysis. However, I could see any problems reported by the simulator.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ASP.Net 2.0 redirections&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="5"&gt;EUREKA &lt;/font&gt;&lt;/strong&gt;It seems that ASP.Net 2.0 contains an error when it comes to its Url Redirection technique based on RewritePath. This method seems to work well for certain User Agents but not for all of them. Guess what, Googlebot was one of the User Agents where things went wrong.&lt;/p&gt; &lt;p&gt;&lt;a href="http://todotnet.com/archive/0001/01/01/7472.aspx"&gt;You can read detailed information on this subject here.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1094" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Work/default.aspx">Work</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/SEO/default.aspx">SEO</category></item><item><title>Don't register your Http Response Filter too soon</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/17/don-t-register-your-http-response-filter-too-soon.aspx</link><pubDate>Tue, 17 Jul 2007 10:24:19 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1093</guid><dc:creator>ErikL</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1093</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/17/don-t-register-your-http-response-filter-too-soon.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m working on a Translation system for one of my&amp;nbsp;customers and I used a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpresponse.filter.aspx"&gt;Http response Filter&lt;/a&gt;. The filter basically looks for certain patterns and replaces these with new values. This way we translate&amp;nbsp;some content of the pages.&lt;/p&gt; &lt;p&gt;The filter is&amp;nbsp;registered using an &lt;a href="http://msdn2.microsoft.com/en-us/library/ms178468.aspx"&gt;HttpModule&lt;/a&gt;&amp;nbsp;like shown in the code below. The goal of this filter is to only&amp;nbsp;translate HTML pages and ignore the others like images, javascripts, css, ...&lt;/p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Only&amp;nbsp;apply&amp;nbsp;the&amp;nbsp;translation&amp;nbsp;filter&amp;nbsp;on&amp;nbsp;html&amp;nbsp;content,&amp;nbsp;since&amp;nbsp;content&amp;nbsp;like&amp;nbsp;javascrip&amp;nbsp;shouldn&amp;#39;t&amp;nbsp;be&amp;nbsp;&lt;br /&gt;//&amp;nbsp;translated &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.ContentType&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style="color:darkred;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;filter&amp;nbsp;and&amp;nbsp;insert&amp;nbsp;it&amp;nbsp;onto&amp;nbsp;the&amp;nbsp;page &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;This&amp;nbsp;filter&amp;nbsp;will&amp;nbsp;later&amp;nbsp;on,&amp;nbsp;translate&amp;nbsp;all&amp;nbsp;content &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;TranslationFilter&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt; &lt;p&gt;Note that in the example code above that &lt;font face="Courier New"&gt;_context&lt;/font&gt; is a class level variable initialized in the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ihttpmodule.init.aspx"&gt;Init&lt;/a&gt; method of the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ihttpmodule.aspx"&gt;IHttpModule&lt;/a&gt; interface&lt;/p&gt; &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;///&amp;nbsp;Inits&amp;nbsp;the&amp;nbsp;specified&amp;nbsp;application. &lt;br /&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;application&amp;quot;&amp;gt;The&amp;nbsp;current&amp;nbsp;Http&amp;nbsp;Application&amp;lt;/param&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Init&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;System.Web.HttpApplication&amp;nbsp;application&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_context&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;application&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//... &lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;The point of this post is to underline &lt;strong&gt;WHEN&lt;/strong&gt; you should register the filter. If we look at the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms178473.aspx"&gt;Application Life Cycle&lt;/a&gt;&amp;nbsp;like in the picture below. If you would register the filter during the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpapplication.beginrequest.aspx"&gt;BeginRequest&lt;/a&gt; as I did initially then you won&amp;#39;t have any information on the ContentType via &lt;font face="Courier New"&gt;_context.Response.ContentType&lt;/font&gt;. At the BeginRequest point in time, the page isn&amp;#39;t executed yet and hence no content type information is set. So, you need to register this later on like on the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpapplication.releaserequeststate.aspx"&gt;ReleaseRequestState&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/DontregisteryourHttpResponseFiltertoosoo_A98E/asp.net%20app%20life%20cycle%5B4%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="480" alt="ASP.Net life cycle" src="http://www.dotnet6.com/blogs/erik_lenaerts/WindowsLiveWriter/DontregisteryourHttpResponseFiltertoosoo_A98E/asp.net%20app%20life%20cycle_thumb%5B2%5D.jpg" width="393" border="0" /&gt;&lt;/a&gt; &amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;(Image referenced from &lt;/font&gt;&lt;a href="http://aspnetresources.com/articles/HttpFilters.aspx"&gt;&lt;font size="2"&gt;this&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; article)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Complete code:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:blue;"&gt;using&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;using&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Collections.Generic&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;using&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Text&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;using&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Web&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;using&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Text.RegularExpressions&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;namespace&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Translation &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Translation&amp;nbsp;HttpModule &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;class&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;TranslationHttpModule&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;IHttpModule &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;System.Web.HttpApplication&amp;nbsp;_context&lt;/span&gt;&lt;span style="color:gray;"&gt;;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Disposes&amp;nbsp;of&amp;nbsp;the&amp;nbsp;resources&amp;nbsp;(other&amp;nbsp;than&amp;nbsp;memory)&amp;nbsp;used&amp;nbsp;by&amp;nbsp;the&amp;nbsp;module&amp;nbsp;that&amp;nbsp;implements&amp;nbsp;&amp;lt;see&amp;nbsp;cref=&amp;quot;T:System.Web.IHttpModule&amp;quot;&amp;gt;&amp;lt;/see&amp;gt;. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Dispose&lt;/span&gt;&lt;span style="color:gray;"&gt;()&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Inits&amp;nbsp;the&amp;nbsp;specified&amp;nbsp;application. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;/summary&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&amp;quot;application&amp;quot;&amp;gt;The&amp;nbsp;current&amp;nbsp;Http&amp;nbsp;Application&amp;lt;/param&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;Init&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;System.Web.HttpApplication&amp;nbsp;application&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_context&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;application&lt;/span&gt;&lt;span style="color:gray;"&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_context.ReleaseRequestState&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;EventHandler&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context_ReleaseRequestState&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;void&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_context_ReleaseRequestState&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;object&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;sender&lt;/span&gt;&lt;span style="color:gray;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;EventArgs&amp;nbsp;e&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Only&amp;nbsp;apply&amp;nbsp;the&amp;nbsp;translation&amp;nbsp;filter&amp;nbsp;on&amp;nbsp;html&amp;nbsp;content,&amp;nbsp;since&amp;nbsp;content&amp;nbsp;like&amp;nbsp;javascrip&amp;nbsp;shouldn&amp;#39;t&amp;nbsp;be&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;translated &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.ContentType&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style="color:darkred;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;filter&amp;nbsp;and&amp;nbsp;insert&amp;nbsp;it&amp;nbsp;onto&amp;nbsp;the&amp;nbsp;page &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;This&amp;nbsp;filter&amp;nbsp;will&amp;nbsp;later&amp;nbsp;on,&amp;nbsp;translate&amp;nbsp;all&amp;nbsp;content &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;TranslationFilter&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;_context.Response.Filter&lt;/span&gt;&lt;span style="color:gray;"&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black;"&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1093" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Work/default.aspx">Work</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/ASP.Net/default.aspx">ASP.Net</category></item><item><title>ASP.Net Thickbox control</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/07/asp-net-thickbox-control.aspx</link><pubDate>Sat, 07 Jul 2007 15:44:00 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1080</guid><dc:creator>ErikL</dc:creator><slash:comments>22</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1080</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/07/asp-net-thickbox-control.aspx#comments</comments><description>&lt;p&gt;On a regular basis we needed the thickbox functionalities on our ASP.Net web sites. I&amp;#39;m a fan of the &lt;a href="http://jquery.com/demo/thickbox/"&gt;thickbox implementation from Codey Lindley&lt;/a&gt;.&amp;nbsp;We wanted to make this functionality easier to consume in ASP.Net so&amp;nbsp;we decided to package this functionality into an Server Control as we did last time with the &lt;a href="http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/06/16/asp-net-tooltip-control.aspx"&gt;tooltip control&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Again, I&amp;#39;m not taking any credit here, just spreading the word :)&lt;/p&gt;
&lt;p&gt;Thnx Wannes &amp;amp; Didr for helping me out here to develop this control.&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="http://www.dotnet6.com/files/folders/controls/entry1107.aspx"&gt;Download the complete code (Visual Studio 2005 Solution) here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="http://www.dotnet6.com/files/folders/controls/entry1108.aspx"&gt;Download the control&amp;#39;s Assembly here&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Edit : &lt;a class="" href="http://www.dotnet6.com/files/folders/controls/entry1126.aspx"&gt;Source code including button support from Madas&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1080" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Tools/default.aspx">Tools</category></item><item><title>New Website Nieuwinckel</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/07/new-website-nieuwinckel.aspx</link><pubDate>Sat, 07 Jul 2007 15:19:00 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1079</guid><dc:creator>ErikL</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1079</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/07/new-website-nieuwinckel.aspx#comments</comments><description>&lt;p&gt;i recently finished a new website in my spare time. The web site is for a friend who owns a interior design store. you can take a look at the site here: &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.nieuwinckel.com"&gt;http://www.nieuwinckel.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;To be honest this posting is more to get some link popularity for that site :) anyway, hope it helps ...&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1079" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/SEO/default.aspx">SEO</category></item><item><title>DateTime and Number format overview</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/05/datetime-and-number-format-overview.aspx</link><pubDate>Thu, 05 Jul 2007 07:02:30 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1068</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1068</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/07/05/datetime-and-number-format-overview.aspx#comments</comments><description>&lt;p&gt;Very handy if you always need to start the VS Help to lookup on those date or number formats....&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a title="http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf" href="http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf"&gt;http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1068" width="1" height="1"&gt;</description><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Development/default.aspx">Development</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://www.dotnet6.com/blogs/erik_lenaerts/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Upgraded to Community Server 2007</title><link>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/06/26/upgraded-to-community-server-2007.aspx</link><pubDate>Tue, 26 Jun 2007 06:45:29 GMT</pubDate><guid isPermaLink="false">e5d4c6e2-da0c-4b9e-b9f2-d96787ec4ab1:1050</guid><dc:creator>ErikL</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnet6.com/blogs/erik_lenaerts/rsscomments.aspx?PostID=1050</wfw:commentRss><comments>http://www.dotnet6.com/blogs/erik_lenaerts/archive/2007/06/26/upgraded-to-community-server-2007.aspx#comments</comments><description>&lt;p&gt;After a small delay and some outage, we finished the migration of dotnet6.com to the &lt;a href="http://www.communityserver.org"&gt;Community Server&lt;/a&gt; 2007 release.&lt;/p&gt; &lt;p&gt;We changed the comment moderation settings to review. So, be patient when adding comment as the blog author will review it and accept it first. This way we hope to fight against the spam dotnet6 was suffering from.&lt;/p&gt; &lt;p&gt;The changes in CS 2K7 towards Google will hopefully affect our ranking as wel.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://docs.communityserver.org/kb/article.aspx/228/does-community-server-support-google-sitemaps/"&gt;Google sitemaps&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://communityserver.org/blogs/videos/archive/2007/04/30/how-to-use-google-analytics-in-community-server.aspx"&gt;Google Analytics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.dotnet6.com/aggbug.aspx?PostID=1050" width="1" height="1"&gt;</description></item></channel></rss>