As always my posts are usually based on experiencing some travesty of code that required me either to change or endure it. In this case I was looking at a web page who’s only purpose was to return data … for the more seasoned among us the preceding sentence should scream murder. The truth is a web page has a metric ton of overhead and simply using them as conduits for the delivery of raw unformatted non html information (jpeg, text,xml, etc) is a pure waste of resources. The following is an example of what not to do when you trying to return data:
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text; public partial class WebPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "text/xml"; Response.ContentEncoding = Encoding.UTF8; string xml = GetXMLString(); //Not interested in the details Response.Write(xml); } }
This example takes advantage of the generic handler, which has all the flexibility of a web page but none of the overhead of the web page life cycle. While I am returning text/xml this could be any of your defined MIME types.
<%@ WebHandler Language="C#" Class="SomeHandler" %> using System; using System.Web; using System.Text; public class SomeHandler : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/xml"; context.Response.ContentEncoding = Encoding.UTF8; string xml = GetXMLString(); //Not interested in the details context.Response.Write(xml); } public bool IsReusable { get { return false; } } }
In my humble opinion the above concept should be known to all senior asp.net developers, in fact this is one of the first interview questions I ask.
Comments are closed.