using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web; namespace TestWebApplication { public class ResponseSniffModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.PreRequestHandlerExecute += context_PreRequestHandlerExecute; context.PreSendRequestContent += context_PreSendRequestContent; } void context_PreRequestHandlerExecute(object sender, EventArgs e) { var application = sender as HttpApplication; var context = application.Context; var response = context.Response; // Add a filter to capture response stream response.Filter = new ResponseSniffer(response.Filter); } void context_PreSendRequestContent(object sender, EventArgs e) { var application = sender as HttpApplication; var context = application.Context; var response = context.Response; var filter = response.Filter as ResponseSniffer; if (filter != null) { var reader = new StreamReader(new MemoryStream(filter.RecordStream.GetBuffer())); var source = reader.ReadToEnd(); } } } public class ResponseSniffer : Stream { private readonly Stream ResponseStream; public MemoryStream RecordStream { get; set; } #region Implements of Stream public override bool CanRead { get { return ResponseStream.CanRead; } } public override bool CanSeek { get { return ResponseStream.CanSeek; } } public override bool CanWrite { get { return ResponseStream.CanWrite; } } public override void Flush() { ResponseStream.Flush(); } public override long Length { get { return ResponseStream.Length; } } public override long Position { get { return ResponseStream.Position; } set { ResponseStream.Position = value; } } public override int Read(byte[] buffer, int offset, int count) { return ResponseStream.Read(buffer, offset, count); } public override long Seek(long offset, SeekOrigin origin) { return Seek(offset, origin); } public override void SetLength(long value) { ResponseStream.SetLength(value); } public override void Write(byte[] buffer, int offset, int count) { RecordStream.Write(buffer, offset, count); ResponseStream.Write(buffer, offset, count); } #endregion public ResponseSniffer(Stream stream) { RecordStream = new MemoryStream(); ResponseStream = stream; } } }
2013/02/25
Capture response output stream using HttpModule
2013/02/19
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.
<xsl:template name="FieldRef_Note_body" ddwrt:dvt_mode="body" match="FieldRef" mode="Note_body"> <xsl:param name="thisNode" select="."/> <div dir="{@Direction}" class="ms-rtestate-field"> <xsl:value-of select="concat(substring($thisNode/@*[name()=current()/@Name],0,50), ' ...')" disable-output-escaping="yes"/> </div> </xsl:template>
2013/02/07
explicit, implicit and operator
public class Name { /// <summary> /// The implicit keyword is used to declare an implicit user-defined type conversion operator. /// Use it to enable implicit conversions between a user-defined type and another type, /// if the conversion is guaranteed not to result in a loss of data. /// </summary> /// <param name="name"></param> /// <returns></returns> public static implicit operator Name(string name) { return new Name(name); } /// <summary> /// The explicit keyword declares a user-defined type conversion operator that must be /// invoked with a cast /// </summary> /// <param name="name"></param> /// <returns></returns> public static explicit operator string(Name name) { return name.Content; } /// <summary> /// Use the operator keyword to overload a built-in operator or to provide a user-defined /// conversion in a class or struct declaration. /// </summary> /// <param name="n1"></param> /// <param name="n2"></param> /// <returns></returns> public static Name operator +(Name n1, Name n2) { return n1.Content + n1.Content; } string Content; public Name(string name) { Content = name; } public override string ToString() { return Content; } } class Program { public static void Main(string[] args) { Name n1 = new Name("Bruce"); Console.WriteLine(n1); // output: Bruce Name n2 = "Bruce"; // auto cast Console.WriteLine(n2); // output: Bruce string n3 = (string)n1; // manual cast Console.WriteLine(n3); // output: Bruce Console.WriteLine(n1 + n2); // output: BruceBruce } }reference: explicit, implicit, operator