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
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" />
在梦想和现实之间寻找平衡 在欲望和理想之间左右的妥协!平淡又平凡的努力生活!