ASP.NET中的无刷新验证码的开发(完整代码)

下面我将详细讲解ASP.NET中的无刷新验证码的开发,包括完整代码和示例说明。

环境准备

在开始开发之前,需要准备好以下环境:
- Visual Studio 2019
- .NET Framework 4.6.1或以上版本
- jQuery库

实现流程

本篇攻略中的无刷新验证码,是通过使用jQuery和ASP.NET的Web服务技术实现的。具体的实现流程如下:

1. 生成验证码图片

首先,需要生成随机的验证码图片以供用户识别。可以使用以下方式来生成验证码图片:

public void GenerateCaptchaImage(string captchaCode)
{
    Bitmap image = new Bitmap(80, 30);
    Graphics graphics = Graphics.FromImage(image);
    graphics.Clear(Color.White);

    // 绘制验证码
    graphics.DrawString(captchaCode, new Font("Arial", 16), Brushes.Black, new PointF(5, 5));

    // 绘制噪点
    Random random = new Random();
    for (int i = 0; i < 100; i++)
    {
        int x = random.Next(image.Width);
        int y = random.Next(image.Height);
        image.SetPixel(x, y, Color.FromArgb(random.Next()));
    }

    // 绘制边框
    graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

    // 输出图片
    MemoryStream memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Png);
    Response.ClearContent();
    Response.ContentType = "image/png";
    Response.BinaryWrite(memoryStream.ToArray());
}

2. 生成随机验证码

然后,需要生成一个随机的验证码字符串,以供上一步生成图片时使用。可以使用以下方式来生成随机的验证码字符串:

public string GenerateCaptchaCode()
{
    string captchaCode = "";
    var random = new Random();
    for (int i = 0; i < 5; i++)
    {
        captchaCode += (char)('a' + random.Next(0, 26));
    }
    return captchaCode;
}

3. 调用Web服务获取验证码

接下来,前端页面通过Ajax调用Web服务获取验证码图片的URL和验证码字符串:

function getCaptcha() {
    $.ajax({
        url: '/CaptchaWebService.asmx/GetCaptcha',
        type: 'POST',
        dataType: 'json',
        success: function (data) {
            $("#captchaImg").attr("src", data.ImageUrl);
            $("#captchaCode").val(data.CaptchaCode);
        },
        error: function (xhr, statusText, errorThrown) {
            alert(errorThrown);
        }
    });
}

这里的/CaptchaWebService.asmx/GetCaptcha是指向Web服务的URL,后面会在WebService中实现该方法。

4. Web服务实现获取验证码

在Web服务中,需要实现获取验证码的方法,该方法返回一个JSON对象,包括验证码图片的URL和验证码字符串:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GetCaptcha()
{
    string captchaCode = GenerateCaptchaCode();
    GenerateCaptchaImage(captchaCode);
    string imageUrl = string.Format("/CaptchaImageHandler.ashx?c={0}", captchaCode);
    var result = new { ImageUrl = imageUrl, CaptchaCode = captchaCode };
    JavaScriptSerializer js = new JavaScriptSerializer();
    Context.Response.Write(js.Serialize(result));
}

5. 验证用户输入

最后,验证用户输入的验证码是否正确。前端页面可以通过以下方式获取用户输入的验证码:

var captchaCode = $("#inputCaptcha").val();

然后将该验证码字符串和Web服务返回的验证码字符串进行比较,判断用户输入的验证码是否正确。

完整代码

下面是完整的代码。其中,CaptchaImageHandler.ashx用于从URL中获取验证码字符串,并调用GenerateCaptchaImage方法生成验证码图片。CaptchaWebService.asmx用于提供获取验证码的Web服务。

// CaptchaImageHandler.ashx.cs
public class CaptchaImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/png";
        string captchaCode = context.Request.QueryString["c"];
        GenerateCaptchaImage(captchaCode);
    }
    public bool IsReusable => false;
    private void GenerateCaptchaImage(string captchaCode)
    {
        Bitmap image = new Bitmap(80, 30);
        Graphics graphics = Graphics.FromImage(image);
        graphics.Clear(Color.White);

        // 绘制验证码
        graphics.DrawString(captchaCode, new Font("Arial", 16), Brushes.Black, new PointF(5, 5));

        // 绘制噪点
        Random random = new Random();
        for (int i = 0; i < 100; i++)
        {
            int x = random.Next(image.Width);
            int y = random.Next(image.Height);
            image.SetPixel(x, y, Color.FromArgb(random.Next()));
        }

        // 绘制边框
        graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

        // 输出图片
        MemoryStream memoryStream = new MemoryStream();
        image.Save(memoryStream, ImageFormat.Png);
        HttpContext.Current.Response.BinaryWrite(memoryStream.ToArray());
    }
}

// CaptchaWebService.asmx.cs
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class CaptchaWebService : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public void GetCaptcha()
    {
        string captchaCode = GenerateCaptchaCode();
        GenerateCaptchaImage(captchaCode);
        string imageUrl = string.Format("/CaptchaImageHandler.ashx?c={0}", captchaCode);
        var result = new { ImageUrl = imageUrl, CaptchaCode = captchaCode };
        JavaScriptSerializer js = new JavaScriptSerializer();
        Context.Response.Write(js.Serialize(result));
    }

    private void GenerateCaptchaImage(string captchaCode)
    {
        Bitmap image = new Bitmap(80, 30);
        Graphics graphics = Graphics.FromImage(image);
        graphics.Clear(Color.White);

        // 绘制验证码
        graphics.DrawString(captchaCode, new Font("Arial", 16), Brushes.Black, new PointF(5, 5));

        // 绘制噪点
        Random random = new Random();
        for (int i = 0; i < 100; i++)
        {
            int x = random.Next(image.Width);
            int y = random.Next(image.Height);
            image.SetPixel(x, y, Color.FromArgb(random.Next()));
        }

        // 绘制边框
        graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

        // 输出图片
        MemoryStream memoryStream = new MemoryStream();
        image.Save(memoryStream, ImageFormat.Png);
        HttpContext.Current.Response.BinaryWrite(memoryStream.ToArray());
    }

    private string GenerateCaptchaCode()
    {
        string captchaCode = "";
        var random = new Random();
        for (int i = 0; i < 5; i++)
        {
            captchaCode += (char)('a' + random.Next(0, 26));
        }
        return captchaCode;
    }
}

示例说明

假设我们需要在一个ASP.NET网页中实现无刷新验证码验证,可以按照以下步骤进行:

示例1:生成验证码图片

在我们的ASP.NET页面中,添加一个按钮,点击该按钮可以生成一个新的验证码图片和验证码字符串:

<button id="btnRefreshCaptcha" type="button" onclick="getCaptcha()">刷新</button>
<img id="captchaImg" src="#" alt="验证码" /><br/><br/>
<input id="captchaCode" type="hidden" />

在Javascript中,使用getCaptcha()方法来调用Web服务,获取验证码图片和验证码字符串:

function getCaptcha() {
    $.ajax({
        url: '/CaptchaWebService.asmx/GetCaptcha',
        type: 'POST',
        dataType: 'json',
        success: function (data) {
            $("#captchaImg").attr("src", data.ImageUrl);
            $("#captchaCode").val(data.CaptchaCode);
        },
        error: function (xhr, statusText, errorThrown) {
            alert(errorThrown);
        }
    });
}

示例2:验证用户输入

在表单中,添加一个验证码输入框和一个提交按钮。在提交时,验证用户输入的验证码是否正确:

<form method="post" action="form-submit-action">
    <!-- 省略其他表单元素 -->
    <label>验证码:</label>
    <input id="inputCaptcha" type="text" name="captcha" />
    <button type="submit" onclick="return validateCaptcha()">提交</button>
</form>

在Javascript中,使用validateCaptcha()方法来验证用户输入的验证码是否正确:

function validateCaptcha() {
    var captchaCode = $("#inputCaptcha").val();
    var expectedCaptchaCode = $("#captchaCode").val();
    if (captchaCode === expectedCaptchaCode) {
        return true; // 验证通过,提交表单
    } else {
        alert("验证码输入错误!");
        return false; // 验证失败,不提交表单
    }
}

使用以上的示例代码,我们就可以在ASP.NET中实现无刷新验证码验证了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET中的无刷新验证码的开发(完整代码) - Python技术站

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

相关文章

  • jQuery ajax仿Google自动提示SearchSuggess功能示例

    下面我将为你讲解“jQuery ajax仿Google自动提示SearchSuggess功能示例”的完整攻略。 简介 在网页中,我们经常需要使用搜索框来搜索一些内容,但是当我们输入关键词时,往往会出现一些自动提示,比如Google搜索框中的SearchSuggess功能。这种功能可以帮助我们更快地找到自己需要的信息,提高了搜索效率。本文将讲述如何使用jQue…

    C# 2023年5月31日
    00
  • .net c# gif动画如何添加图片水印实现思路及代码

    下面是详细的“.net c# gif动画如何添加图片水印实现思路及代码”的攻略。 思路 添加图片水印到gif动画,可以考虑以下步骤: 将gif动画拆分成多个帧(图片),可以使用 GifDecoder 类进行解码。解码后可以获得每一帧的 Bitmap 对象。 对于每个 Bitmap 对象,使用 Graphics 类的 DrawImage 方法,将原图和水印图像…

    C# 2023年6月6日
    00
  • asp.net中Fine Uploader文件上传组件使用介绍

    下面是关于“asp.net中Fine Uploader文件上传组件使用介绍”的完整攻略。 Fine Uploader是什么? Fine Uploader是一个基于JavaScript的文件上传库,它支持大文件上传、断点续传、浏览器兼容性好等特性。Fine Uploader可以通过原生的XHR2(XMLHttpRequest Level 2)实现文件上传,在服…

    C# 2023年6月1日
    00
  • C# 使用 Castle 实现 AOP及如何用 Autofac 集成 Castle

    一、什么是AOP AOP(Aspect Oriented Programming,面向切面编程)是一种编程思想,是对OOP(Object Oriented Programming,面向对象编程)的补充和完善。它将程序中的关注点分为核心关注点和横切关注点,其中核心关注点指的是程序核心业务逻辑,横切关注点指的是与核心业务逻辑无关的代码,例如日志、事务、缓存等等。…

    C# 2023年5月15日
    00
  • c# 解决IIS写Excel的权限问题

    针对这个问题,我们需要先明确一下背景和原理。 背景 通常情况下,在我们开发 ASP.NET 程序时,会遇到需要生成 Excel 文件的情况。而在将 Excel 文件写入到服务器磁盘时,可能会面临权限不足的问题,导致写入失败。那么如何解决这个问题呢? 原理 在 IIS 中,每个应用程序池都有一个对应的身份标识,这个身份标识默认是 IIS AppPool{应用程…

    C# 2023年5月15日
    00
  • C#中动态显示当前系统时间的实例方法

    下面我将为您详细讲解在C#中动态显示当前系统时间的实例方法的完整攻略。 步骤1:创建新的控制台应用程序 在Visual Studio中创建新的控制台应用程序,命名为“DynamicTime”。 步骤2:添加必要的命名空间 为了使用C#中的DateTime类,我们需要在程序中添加System命名空间。 using System; 步骤3:创建主方法 在Main…

    C# 2023年6月1日
    00
  • C#自定义集合初始化器

    C#中的自定义集合初始化器是一种语法糖,它可以让我们更方便地初始化一个自定义集合。下面是一个使用自定义集合初始化器的例子: var list = new MyList<int> { 1, 2, 3 }; 在这个例子中,我们使用了自定义集合初始化器来初始化一个名为MyList的自定义集合,其中包含了3个整数值。 为了使用自定义集合初始化器,我们需要…

    C# 2023年6月7日
    00
  • C#实现远程连接ORACLE数据库的方法

    下面将为您详细讲解C#实现远程连接ORACLE数据库的方法及过程。 准备工作 在使用C#实现远程连接ORACLE数据库之前,我们需要准备相应的环境和工具,包括: 安装ORACLE数据库 下载安装Oracle Client和ODP.NET 使用Visual Studio创建C#项目 连接ORACLE数据库 在开始连接ORACLE数据库之前,我们需要先在项目中添…

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