/// <summary> /// Enables processing of HTTP Web requests by a custom HttpHandler that implements the <see cref="T:System.Web.IHttpHandler"/> interface. /// </summary> /// <param name="context">An <see cref="T:System.Web.HttpContext"/> object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) used to service HTTP requests.</param> public void ProcessRequest(HttpContext context) { // get the unique GUID of the captcha; this must be passed in via the querystring String guid = context.Request.QueryString["guid"]; CaptchaImage ci = CaptchaImage.GetCachedCaptcha(guid); if (String.IsNullOrEmpty(guid) || ci == null) { context.Response.StatusCode = 404; context.Response.StatusDescription = "Not Found"; context.ApplicationInstance.CompleteRequest(); return; } // write the image to the HTTP output stream as an array of bytes using (Bitmap b = ci.RenderImage()) { b.Save(context.Response.OutputStream, ImageFormat.Gif); } context.Response.ContentType = "image/png"; context.Response.StatusCode = 200; context.Response.StatusDescription = "OK"; context.ApplicationInstance.CompleteRequest(); }
/// <summary> /// Generates the captcha image. /// </summary> /// <param name="helper">The helper.</param> /// <param name="height">The height.</param> /// <param name="width">The width.</param> /// <returns> /// Returns the <see cref="Uri"/> for the generated <see cref="CaptchaImage"/>. /// </returns> public static String CaptchaImage(this HtmlHelper helper, int height, int width) { var image = new CaptchaImage { Height = height, Width = width, }; HttpRuntime.Cache.Add( image.UniqueId, image, null, DateTime.Now.AddSeconds(Captcha.CaptchaImage.CacheTimeOut), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null); var stringBuilder = new StringBuilder(256); stringBuilder.Append("<input type=\"hidden\" name=\"captcha-guid\" value=\""); stringBuilder.Append(image.UniqueId); stringBuilder.Append("\" />"); stringBuilder.AppendLine(); stringBuilder.Append("<img src=\""); stringBuilder.Append(ApplicationUtility.Path + "captcha.ashx?guid=" + image.UniqueId); stringBuilder.Append("\" alt=\"CAPTCHA\" width=\""); stringBuilder.Append(width); stringBuilder.Append("\" height=\""); stringBuilder.Append(height); stringBuilder.Append("\" />"); return stringBuilder.ToString(); }