Popular Posts
javax.net.ssl.SSLHandshakeException: Connection closed by peer in Android 5.0 Lollipop Recently, there is a error occurs when access website via ssl connection like below although it worked fine several days ago. // Enable SSL... Enable SSL connection for Jsoup import org.jsoup.Connection; import org.jsoup.Jsoup; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagement... Copy/Delete/Permission directory using System; using System.IO; using System.Security.AccessControl; namespace Bruce.Lib {     public class DirHelper     {         /// <...
Stats
Capture response output stream using HttpModule
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Web;
  7.  
  8. namespace TestWebApplication
  9. {
  10.     public class ResponseSniffModule : IHttpModule
  11.     {
  12.         public void Dispose()
  13.         {
  14.  
  15.         }
  16.  
  17.         public void Init(HttpApplication context)
  18.         {
  19.             context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;
  20.             context.PreSendRequestContent += context_PreSendRequestContent;
  21.         }
  22.  
  23.         void context_PreRequestHandlerExecute(object sender, EventArgs e)
  24.         {
  25.             var application = sender as HttpApplication;
  26.             var context = application.Context;
  27.             var response = context.Response;
  28.  
  29.             // Add a filter to capture response stream
  30.             response.Filter = new ResponseSniffer(response.Filter);
  31.         }
  32.  
  33.         void context_PreSendRequestContent(object sender, EventArgs e)
  34.         {
  35.             var application = sender as HttpApplication;
  36.             var context = application.Context;
  37.             var response = context.Response;
  38.  
  39.             var filter = response.Filter as ResponseSniffer;
  40.  
  41.             if (filter != null)
  42.             {
  43.                 var reader = new StreamReader(new MemoryStream(filter.RecordStream.GetBuffer()));
  44.                 var source = reader.ReadToEnd();
  45.             }
  46.         }
  47.     }
  48.  
  49.     public class ResponseSniffer : Stream
  50.     {
  51.         private readonly Stream ResponseStream;
  52.  
  53.         public MemoryStream RecordStream { get; set; }
  54.  
  55.         #region Implements of Stream
  56.         public override bool CanRead
  57.         {
  58.             get { return ResponseStream.CanRead; }
  59.         }
  60.  
  61.         public override bool CanSeek
  62.         {
  63.             get { return ResponseStream.CanSeek; }
  64.         }
  65.  
  66.         public override bool CanWrite
  67.         {
  68.             get { return ResponseStream.CanWrite; }
  69.         }
  70.  
  71.         public override void Flush()
  72.         {
  73.             ResponseStream.Flush();
  74.         }
  75.  
  76.         public override long Length
  77.         {
  78.             get { return ResponseStream.Length; }
  79.         }
  80.  
  81.         public override long Position
  82.         {
  83.             get
  84.             {
  85.                 return ResponseStream.Position;
  86.             }
  87.             set
  88.             {
  89.                 ResponseStream.Position = value;
  90.             }
  91.         }
  92.  
  93.         public override int Read(byte[] buffer, int offset, int count)
  94.         {
  95.             return ResponseStream.Read(buffer, offset, count);
  96.         }
  97.  
  98.         public override long Seek(long offset, SeekOrigin origin)
  99.         {
  100.             return Seek(offset, origin);
  101.         }
  102.  
  103.         public override void SetLength(long value)
  104.         {
  105.             ResponseStream.SetLength(value);
  106.         }
  107.  
  108.         public override void Write(byte[] buffer, int offset, int count)
  109.         {
  110.             RecordStream.Write(buffer, offset, count);
  111.             ResponseStream.Write(buffer, offset, count);
  112.         }
  113.         #endregion
  114.  
  115.         public ResponseSniffer(Stream stream)
  116.         {
  117.             RecordStream = new MemoryStream();
  118.             ResponseStream = stream;
  119.         }
  120.     }
  121. }
Multiple line of text limit
With Sharepoint Designer, edit the page of list view. Add xsl template as below to override original template. Source template could be found at http://[servername]/_layouts/xsl/fldtypes.xsl.
  1. <xsl:template name="FieldRef_Note_body" ddwrt:dvt_mode="body" match="FieldRef" mode="Note_body">
  2.   <xsl:param name="thisNode" select="."/>
  3.   <div dir="{@Direction}" class="ms-rtestate-field">
  4.     <xsl:value-of select="concat(substring($thisNode/@*[name()=current()/@Name],0,50), '  ...')" disable-output-escaping="yes"/>
  5.   </div>
  6. </xsl:template>
explicit, implicit and operator
  1. public class Name
  2. {
  3.     /// <summary>
  4.     /// The implicit keyword is used to declare an implicit user-defined type conversion operator.
  5.     /// Use it to enable implicit conversions between a user-defined type and another type, 
  6.     /// if the conversion is guaranteed not to result in a loss of data.
  7.     /// </summary>
  8.     /// <param name="name"></param>
  9.     /// <returns></returns>
  10.     public static implicit operator Name(string name)
  11.     {
  12.         return new Name(name);
  13.     }
  14.  
  15.     /// <summary>
  16.     /// The explicit keyword declares a user-defined type conversion operator that must be 
  17.     /// invoked with a cast
  18.     /// </summary>
  19.     /// <param name="name"></param>
  20.     /// <returns></returns>
  21.     public static explicit operator string(Name name)
  22.     {
  23.         return name.Content;
  24.     }
  25.  
  26.     /// <summary>
  27.     /// Use the operator keyword to overload a built-in operator or to provide a user-defined 
  28.     /// conversion in a class or struct declaration.
  29.     /// </summary>
  30.     /// <param name="n1"></param>
  31.     /// <param name="n2"></param>
  32.     /// <returns></returns>
  33.     public static Name operator +(Name n1, Name n2)
  34.     {
  35.         return n1.Content + n1.Content;
  36.     }
  37.  
  38.     string Content;
  39.  
  40.     public Name(string name)
  41.     {
  42.         Content = name;
  43.     }
  44.  
  45.     public override string ToString()
  46.     {
  47.         return Content;
  48.     }
  49. }
  50.  
  51. class Program
  52. {
  53.     public static void Main(string[] args)
  54.     {
  55.         Name n1 = new Name("Bruce");
  56.         Console.WriteLine(n1);  // output: Bruce
  57.  
  58.         Name n2 = "Bruce";      // auto cast
  59.         Console.WriteLine(n2);  // output: Bruce
  60.  
  61.         string n3 = (string)n1; // manual cast
  62.         Console.WriteLine(n3);  // output: Bruce
  63.  
  64.         Console.WriteLine(n1 + n2);  // output: BruceBruce
  65.     }
  66. }
reference: explicit, implicit, operator