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日

相关文章

  • Coolite配置 管理软件开发历程之

    Coolite配置管理软件开发历程 Coolite是一个ASP.NET AJAX框架,其最大的特点就是提供了一套非常丰富的扩展控件。在使用过程中,可以通过改变配置项,来控制控件的行为。本文主要介绍如何通过Coolite配置来管理深度定制开发过程中的控件行为。 菜单控件的配置 首先,我们来看看菜单控件的配置。在Coolite中,我们可以通过配置来控制菜单控件的…

    C# 2023年6月3日
    00
  • 提取HTML代码中文字的C#函数

    提取HTML代码中的文字可以通过正则表达式来实现,C#中可以使用System.Text.RegularExpressions命名空间下的Regex类来操作正则表达式。 下面是提取HTML中文字的C#函数的完整攻略: 步骤一:引用命名空间和类库 using System.Text.RegularExpressions; 步骤二:编写提取HTML中文字的函数 p…

    C# 2023年5月31日
    00
  • .NET下模拟数组越界的方法详解

    下面我来详细讲一下“.NET下模拟数组越界的方法详解”的攻略。 标题 首先,我们需要明确一下,什么是数组越界。当我们在使用数组时,访问了不存在的数组下标,就会发生数组越界,而这个错误往往会导致程序崩溃或异常。 在.NET中,我们可以通过模拟数组越界的方法来测试代码的鲁棒性和容错性。下面是模拟数组越界的具体步骤: 步骤1:创建一个数组 首先,我们需要创建一个数…

    C# 2023年5月31日
    00
  • C# 字符串、数组和List的截取和转换实例

    我们来讲解一下“C# 字符串、数组和List的截取和转换实例”的完整攻略。 字符串的截取 在C#中,我们使用 Substring() 方法来截取字符串中的一部分。这个方法需要两个参数:截取的起始点索引和截取的字符个数。具体使用方法如下: string str = "Hello, world!"; string subStr1 = str.…

    C# 2023年6月1日
    00
  • C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output)

    C#是一门功能强大的编程语言,可以通过使用Twain协议来调用扫描仪并设置多图像输出模式。下面是具体的步骤: 1. 下载Twain接口 要使用Twain协议,需要首先下载Twain接口。可以通过NuGet包管理器进行下载。 安装步骤如下: 在Visual Studio中选择“工具”菜单,找到“NuGet包管理器”,选择“程序包管理器控制台”,打开控制台。 输…

    C# 2023年6月7日
    00
  • C#中定时任务被阻塞问题的解决方法

    非常感谢您对C#定时任务的关注。在C#中实现定时任务有很多种方式,例如使用定时器、后台线程等,但是在实际开发过程中,我们大多会使用System.Timers.Timer来实现定时任务。System.Timers.Timer提供了很多优秀的功能,例如自动重置、执行一次、多次等。然而在使用System.Timers.Timer时,我们可能会遇到定时任务被阻塞问题…

    C# 2023年5月15日
    00
  • ASP.Net Core中的日志与分布式链路追踪

    ASP.NET Core中的日志与分布式链路追踪 在ASP.NET Core应用程序中,日志和分布式链路追踪是非常重要的方面。日志可以帮助我们记录应用程序的运行情况,以便在出现问题时进行故障排除。分布式链路追踪可以帮助我们跟踪应用程序中的请求,并了解它们在系统中的流动情况。在本攻略中,我们将深入讲解如何在ASP.NET Core应用程序中使用日志和分布式链路…

    C# 2023年5月17日
    00
  • 使用HttpClient增删改查ASP.NET Web API服务

    以下是“使用HttpClient增删改查ASP.NET WebAPI服务”的完整攻略: 什么是HttpClient HttpClient是.NET Framework中的一个类,它提供一组用于发送请求和接收HTTP的方法。我们可以使用它来消费Web API服务。 使用HttpClient增删改查.NET WebAPI服务 以下是使用HttpClient增删改…

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