HttpHandler对象验证码
创建web项目添加HTTPHandler类
如图:
上图VerificationCode便是HttpHandler类
编写HttpHandler类,继承IHttpHandler和IRequiresSessionState‘
代码如下:
public void ProcessRequest(HttpContext context)
{
// 创建一个包含随机内容的验证码文本
Random rand = new Random();
int len = rand.Next(4, 6);
char[] chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
StringBuilder myStr = new StringBuilder();
for (int iCount = 0; iCount < len; iCount++)
{
myStr.Append(chars[rand.Next(chars.Length)]);
}
string text = myStr.ToString();
Size ImageSize = Size.Empty;
Font myFont = new Font("MS Sans Serif", 20);
// 计算验证码图片大小
using (Bitmap bmp = new Bitmap(10, 10))
{
using (Graphics g = Graphics.FromImage(bmp))
{
SizeF size = g.MeasureString(text, myFont, 10000);
ImageSize.Width = (int)size.Width + 1;
ImageSize.Height = (int)size.Height + 1;
}
}
// 创建验证码图片
using (Bitmap bmp = new Bitmap(ImageSize.Width, ImageSize.Height))
{
// 绘制验证码文本
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
using (StringFormat f = new StringFormat())
{
f.Alignment = StringAlignment.Near;
f.LineAlignment = StringAlignment.Center;
f.FormatFlags = StringFormatFlags.NoWrap;
g.DrawString(
text,
myFont,
Brushes.Black,
new RectangleF(
0,
0,
ImageSize.Width,
ImageSize.Height),
f);
}
}
// 制造噪声 杂点面积占图片面积的 30%
int num = ImageSize.Width * ImageSize.Height * 30 / 100;
for (int iCount = 0; iCount < num; iCount++)
{
// 在随机的位置使用随机的颜色设置图片的像素
int x = rand.Next(ImageSize.Width);
int y = rand.Next(ImageSize.Height);
int r = rand.Next(255);
int g = rand.Next(255);
int b = rand.Next(255);
Color c = Color.FromArgb(r, g, b);
bmp.SetPixel(x, y, c);
}
// 输出图片
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
context.Response.ContentType = "image/Gif";
context.Session["CheckCode"] = text;
ms.WriteTo(context.Response.OutputStream);
ms.Close();
}
myFont.Dispose();
}
public bool IsReusable
{
get
{
return false;
}
编写视图层代码
代码如下:
<body>
<form id="form1" runat="server">
<div>
<table style="width:100%;" border="1" cellspacing="0" cellpadding="0">
<tr>
<td>账号</td>
<td><asp:TextBox ID="txtAccount" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>密码</td>
<td><asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox></td>
</tr>
<tr>
<td>验证码</td>
<td>
<asp:TextBox ID="txtCode" runat="server"></asp:TextBox>
<asp:Image ID="Image1" runat="server" ImageUrl="~/VerificationCode.cs" />
<asp:LinkButton ID="LinkButton1" runat="server">刷新</asp:LinkButton>
</td>
</tr>
</table>
<asp:Button ID="btnSubmit" runat="server" Text="提交" style="margin-left:50%; margin-top:2%" OnClick="btnSubmit_Click" />
</div>
<asp:Label ID="lblMessge" runat="server" Text=""></asp:Label>
</form>
</body>
这是视图层前台代码
编写视图层后台代码
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (System.Web.HttpContext.Current.Session["CheckCode"] != null)
{
lblMessge.Text = System.Web.HttpContext.Current.Session["CheckCode"] as string;
Console.WriteLine("登录成功");
}
else
{
lblMessge.Text = "验证码不正确";
}
}
}
记住一个点记得写配置文件
代码如下
<system.webServer>
<handlers>
<add verb="*" path="WebApplication2/*.aspx" name="handler" type="WebApplication2.VerificationCode"/>
</handlers>
</system.webServer>