IHttpHandler实例二-----图像校验码生成器

实例引自《最优化Asp.Net----面向对象开发实践》

HttpHandler可以直接写入.ashx文件而不需要编译。下面这个图像校验码生成器的例子就是这样。生成图像的文本存储于Session对象中,用来与用户的输入进行比较。
 
文件 Image.ashx

<%@ WebHandler Language="C#"   Class="RegisterImagerHandler" %>

imports System
imports system.drawing
imports system.drawing.imaging
imports system.text
imports system.web
imports system.web.sessionstate

public Class RegisterImagerHandler
      
Implements IHttpHandler
      
Implements IReguiresSessionState

    
public sub ProcessRequest(context as HttpContext)
       context.Response.ContentType
="image/gif"
       
       
'//生成背景
        dim b as new Bitmap(200,60)
       
dim g as Graphics=Graphics.FromImage(b)
       g.FileRectangle(
new SolidBrush(Color.White),0,0,200,60)
       
'//生成字符
        dim font as New Font(FontFamily.GenericSerif,48,FontStyle.Bold,GraphicsUnit.Pixel)
       
dim r as new Random()
       
dim letters as string= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
       
dim letter as string 
       
dim s as new StringBuilder()
       
dim x as Integer
       
for x=0 to 4
           letter
=letters.SubString(r.next(0,letters.length-1),1)
           s.append(letter)
           g.drawstring(letter,font ,
New SolidBrush(color.black),x*38,r.next(0.15))
       
next x
       
dim linepen as new Pen(new Solidbrush(color.black),2)
       
dim x as integer
       
for x =0 to 5
           g.DrawLine(linePen,
new Point(r.next(0,199),r.next(0,59)),new point(r.next(0,199),r.next(0,59)))
       
next x
       b.save(context.Response.OutPutStream,ImageFormat.Gif)
       context.Session(
"pfregisterimage")=s.tostring()
       context.Response.End()
  
End Sub

  
  
public readonly property IsReusable() as Boolean
    
get
      
return true
    
end get
  
end property
 
end class


       


在一个页面中个引用这个Handler
<img src="image.ashx" alt="security code" />
posted @ 2008-07-17 10:20  年华倒影  阅读(186)  评论(0编辑  收藏  举报