asp.net使用ashx生成图形验证码的方法示例

下面我将为您详细讲解如何使用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技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 详细介绍.NET中的动态编译技术

    详细介绍.NET中的动态编译技术 动态编译技术是.NET框架中一项非常重要的功能,它可以让我们在运行时动态地编译和执行.NET代码,实现代码动态生成、代码热更新等功能。本文将详细介绍.NET中的动态编译技术,包括如何使用C#和VB.NET两种语言进行动态编译,以及如何执行动态编译后的代码。 使用C#进行动态编译 .NET中使用CSharpCodeProvid…

    C# 2023年5月31日
    00
  • C#窗体实现酒店管理系统

    请看下面的内容: 建立C#窗体项目 要实现酒店管理系统,必须充分发挥C#窗体项目的优势,通过可视化设计实现用户界面,再与数据库连接实现数据的增删改查等操作。 首先,打开Visual Studio,选择“新建项目”,点击“Windows 窗体应用”来创建C#窗体项目。 设计用户界面 在C#窗体项目中,通过拖拽控件来实现用户界面的设计。应该认真考虑用户的使用习惯…

    C# 2023年6月1日
    00
  • C#实现文件与二进制互转并存入数据库

    下面我将为你详细讲解“C#实现文件与二进制互转并存入数据库”的完整攻略。 1. 准备工作 首先,我们需要在C#中引入System.IO和System.Data.SqlClient命名空间,分别用于操作文件和数据库。 using System.IO; using System.Data.SqlClient; 2. 将文件转换为二进制数据 接下来,我们需要将文件…

    C# 2023年5月15日
    00
  • 详解JAVA调用WCF服务的示例代码

    Java和WCF都是用于构建分布式应用程序的技术。Java可以通过调用WCF服务来实现与.NET平台的通信。本文将详细讲解如何使用Java调用WCF服务的示例代码,并提供两个示例。 1. 使用Java调用WCF服务的示例代码 以下是使用Java调用WCF服务的示例代码: import java.net.URL; import javax.xml.namesp…

    C# 2023年5月15日
    00
  • 详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿

    详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿 多线程编程是现代软件开发中非常重要的一个方向。在C#中,有多种方式来进行多线程编程,其中 Thread,Task,Async/Await,IAsyncResult 是最常用的几种方式。 Thread Thread 表示线程类。它允许我们在应用程序中创建新线程来执行…

    C# 2023年6月6日
    00
  • C#在MEF框架中手动导入依赖模块

    C#在MEF(Managed Extensibility Framework,托管可扩展性框架)框架中手动导入依赖模块的过程,可以通过以下步骤来完成: 定义一个C#类库(Class Library)来实现MEF插件的导入 首先,在Visual Studio中创建一个C#类库项目,并将其命名为“Plugin”。在项目中添加一个Router接口和一个实现该接口的…

    C# 2023年6月1日
    00
  • C#通过属性名字符串获取、设置对象属性值操作示例

    下面来详细讲解一下“C#通过属性名字符串获取、设置对象属性值操作示例”的完整攻略。 1. 获取属性值 我们可以使用反射来获取对象的属性值。示例代码如下: var obj = new MyClass(); var propName = "Prop1"; // 要获取的属性名 var propValue = obj.GetType().Get…

    C# 2023年6月1日
    00
  • ASP.NET(C#)中遍历所有控件

    遍历所有控件可以使用递归方法,递归遍历每个控件,并递归遍历控件中的所有子控件。 以下是C#中遍历所有控件的完整攻略: 步骤1:创建递归方法 创建递归方法,并在其中遍历每个控件: private void TraverseControls(Control control) { foreach (Control childControl in control.C…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部