下面我将为您详细讲解如何使用ashx生成图形验证码的方法。
1.什么是ASHX?
ASHX 全称是“ASP.NET Generic Handler”,是一种特殊的文件类型,可以处理的内容不止HTML,还可以处理图片、脚本、样式表等类型。
2. ashx生成图形验证码的过程
使用 ASHX 生成图形验证码的过程分为以下几个步骤:
1)创建 ASHX 文件
在 Visual Studio 创建 Web 项目后,在项目中右键选择“添加”,选择“Generic Handler”,命名为“VerifyCode.ashx”,然后在代码中实现生成验证码的逻辑。
以下是生成验证码的 C# 代码示例:
public class VerifyCode : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.Buffer = true;
context.Response.ContentType = "image/jpeg";
int length = 4;
string checkCode = GetRandomCode(length);
context.Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
CreateCheckCodeImage(checkCode, context);
}
private string GetRandomCode(int length)
{
char[] chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
Random rand = new Random();
string code = "";
for (int i = 0; i < length; i++)
{
code += chars[rand.Next(0, chars.Length - 1)];
}
return code;
}
private void CreateCheckCodeImage(string checkCode, HttpContext context)
{
int width = (int)(checkCode.Length * 13);
Bitmap image = new Bitmap(width, 23);
Graphics g = Graphics.FromImage(image);
try
{
g.Clear(Color.White);
Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);
//画图片的干扰线
Random random = new Random();
for (int i = 0; i < 5; i++)
{
int x1 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int x2 = random.Next(image.Width);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Gold), 0, 0, image.Width - 1, image.Height - 1);
context.Response.Clear();
context.Response.ContentType = "image/jpeg";
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
finally
{
g.Dispose();
image.Dispose();
}
}
public bool IsReusable
{
get { return false; }
}
}
代码解释:
- ProcessRequest 方法:生成验证码并输出
- GetRandomCode 方法:获取由随机数和字母组成的验证码字符串
- CreateCheckCodeImage 方法:将验证码字符串输出为图片
- IsReusable 属性:指示是否可以重用此处理程序实例
2)使用 ASHX 输出验证码图片
在需要显示验证码的位置编写 HTML、ASP.NET、JavaScript 或其他语言的代码,在其中嵌入 ASHX ,通过此文件输出验证码图片。
以下是 ASP.NET 中的代码示例:
<asp:Image ID="imgCheckCode" ImageUrl="~/VerifyCode.ashx" runat="server" onclick="this.src='../VerifyCode.ashx?r='+Math.random()" />
代码解释:
- ImageUrl 属性中的“~”符号表示源目录(项目)的根目录。
- onclick 事件中的“Math.random()”参数用于使每次点击时都会刷新验证码。
3)验证验证码
在服务端使用 Session 存储验证码并在客户端提交表单时进行验证。
以下是 C# 验证代码示例:
if (Session["CheckCode"] == null || Session["CheckCode"].ToString().ToLower() != txtCode.Text.Trim().ToLower())
{
//验证码错误处理逻辑
}
3. ASHX生成图形验证码示例说明
示例一:ASP.NET登录页面生成图形验证码
- 在新建的 ASP.NET Web 应用程序项目中,添加 Generic Handler,命名为“VerifyCode.ashx”,编写代码生成验证码。
- 在登录页面位置(Login.aspx),通过
<asp:Image>
标签,并将 ImageUrl 设置为“~\VerifyCode.ashx”访问 Ashx 文件获取验证码。 - 在登录页的代码中,使用 Session 对象存储验证码并进行验证码验证。
示例二:ASP.NET Web API注册接口生成图形验证码
- 在新建的 ASP.NET WebAPI 项目中,添加 Generic Handler,命名为“VerifyCode.ashx”,编写代码生成验证码。
- 在注册接口上发布验证码,使用
<img src="VerifyCode.ashx">
就可以在前端获取验证码图片。 - 在请求中,附上 Cookie: CheckCode=验证码 文本域,服务端获取并验证此 Cookie 域值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net使用ashx生成图形验证码的方法示例 - Python技术站