asp.net 图片验证码的HtmlHelper

好的。首先,我们需要了解一下什么是HtmlHelper。HtmlHelper是在MVC框架中用来简化HTML表单等元素的生成过程的一个类。在MVC架构中,所有的视图(View)都是通过一个类型为“System.Web.Mvc.HtmlHelper”的对象生成的。 “HtmlHelper”对象可以允许我们以一种简洁、明了且类型安全的方式编写视图。

接下来,我们来详细讲解ASP.NET图片验证码的HtmlHelper的完整攻略。步骤如下:

步骤1:创建验证码生成器

首先,我们要创建一个生成图片验证码的类。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Web.Mvc;

namespace WebApplication1.HtmlHelpers
{
    public static class CaptchaHelper
    {
        private static readonly Random _random = new Random();
        private static readonly string[] _fonts = new[] { "Arial", "Courier", "Georgia", "Tahoma", "Verdana" };

        public static MvcHtmlString Captcha(this HtmlHelper htmlHelper)
        {
            const int width = 110;
            const int height = 36;
            const int fontSize = 18;
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

            var bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var graphics = Graphics.FromImage(bitmap);
            graphics.SmoothingMode = SmoothingMode.AntiAlias;

            var color = Color.FromArgb(240, 240, 240);
            graphics.Clear(color);

            var path = new GraphicsPath();
            var family = new FontFamily(_fonts[_random.Next(_fonts.Length)]);
            var font = new Font(family, fontSize, FontStyle.Bold);

            var len = chars.Length;
            var sb = new StringBuilder();
            var x = 10;

            for (var i = 0; i < 6; i++)
            {
                var c = chars[_random.Next(len)];
                sb.Append(c);

                var y = (height - font.Height) / 2 + _random.Next(-2, 2);

                var matrix = new Matrix();
                var point = new PointF(x, y);
                matrix.RotateAt(_random.Next(-15, 15), point);
                path.AddString(c.ToString(), family, (int) FontStyle.Bold, fontSize, point, StringFormat.GenericDefault);
                path.Transform(matrix);

                x += fontSize;
            }

            var pen = new Pen(Color.FromArgb(_random.Next(0, 100), _random.Next(0, 100), _random.Next(0, 100)), 3);
            graphics.DrawPath(pen, path);

            bitmap.Save(htmlHelper.ViewContext.HttpContext.Response.OutputStream, ImageFormat.Gif);
            htmlHelper.ViewContext.HttpContext.Response.ContentType = "image/gif";

            graphics.Dispose();
            bitmap.Dispose();

            return MvcHtmlString.Empty;
        }
    }
}

这个类有一个名为“Captcha”的静态方法,该方法生成一张验证码图片。在该方法内部,我们使用了Graphics类生成了一张指定大小的空白图片,然后选择了一个随机的字体,使用了GraphicsPath类绘制了验证码字符并进行了旋转处理,最终输出了该图像。

步骤2:添加HtmlHelper扩展方法

然后,我们需要在MVC应用程序中创建扩展HtmlHelper类。在这个类中,我们添加了一个名为“Captcha”的方法,该方法返回一个MvcHtmlString,内容为生成的验证码图片。

using System.Web.Mvc;
using WebApplication1.HtmlHelpers;

namespace WebApplication1
{
    public static class HtmlHelperExtensions
    {
        public static MvcHtmlString Captcha(this HtmlHelper htmlHelper)
        {
            return CaptchaHelper.Captcha(htmlHelper);
        }
    }
}

步骤3:在视图中使用HtmlHelper方法

最后,我们在视图中使用这个HtmlHelper方法来生成验证码图片。

@using WebApplication1.HtmlHelpers
<!DOCTYPE html>
<html>
<head>
    <title>ASP.NET MVC Captcha Example</title>
</head>
<body>
    <form method="post">
        <div>
            @Html.Captcha()
        </div>
        <br />
        <input type="submit" value="Submit" />
    </form>
</body>
</html>

这里使用了Html.Captcha()方法来生成验证码图片。

示例1:ASP.NET MVC 登录表单中使用图片验证码

下面是一个例子,演示如何在ASP.NET MVC应用程序中使用图片验证码来保护登录页面。用户输入用户名和密码后,如果输入正确的验证码图片,才能登录成功。否则,系统不允许用户登录。

@using WebApplication1.HtmlHelpers
@model LoginViewModel
<!DOCTYPE html>
<html>
<head>
    <title>Login Page</title>
</head>
<body>
    @using (Html.BeginForm("Login", "Account", FormMethod.Post))
    {
        <div>
            <label for="UserName">User Name:</label>
            <br />
            @Html.TextBoxFor(m => m.UserName)
        </div>
        <div>
            <label for="Password">Password:</label>
            <br />
            @Html.PasswordFor(m => m.Password)
        </div>
        <div>
            <label for="Captcha">Captcha:</label>
            <br />
            @Html.Captcha()
        </div>
        <br />
        <input type="submit" value="Login" />
    }
</body>
</html>

在控制器中,我们检查用户输入的验证码与生成的验证码是否一致。如果一致,再做其他操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    public class AccountController : Controller
    {
        // GET: Account
        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            if (Session["Captcha"] == null || Session["Captcha"].ToString() != model.Captcha)
            {
                ModelState.AddModelError("Captcha", "The captcha value is incorrect.");
                return View(model);
            }

            // Login logic here...

            return Redirect(returnUrl ?? "/");
        }
    }
}

示例2:ASP.NET核心 MVC 中使用图片验证码

下面是一个示例,演示如何在ASP.NET Core MVC应用程序中使用图片验证码保护登录页面。

@using WebApplication1.HtmlHelpers
@model LoginViewModel
<!DOCTYPE html>
<html>
<head>
    <title>Login Page</title>
</head>
<body>
    <form asp-controller="Home" asp-action="Login" method="post">
        <div>
            <label for="UserName">User Name:</label>
            <br />
            <input type="text" asp-for="UserName" />
        </div>
        <div>
            <label for="Password">Password:</label>
            <br />
            <input type="password" asp-for="Password" />
        </div>
        <div>
            <label for="Captcha">Captcha:</label>
            <br />
            @Html.Captcha()
        </div>
        <br />
        <input type="submit" value="Login" />
    </form>
</body>
</html>

在控制器中,我们检查用户输入的验证码与生成的验证码是否一致。如果一致,再做其他操作:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [HttpGet]
        public IActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            if (HttpContext.Session.GetString("Captcha") == null || HttpContext.Session.GetString("Captcha") != model.Captcha)
            {
                ModelState.AddModelError("Captcha", "The captcha value is incorrect.");
                return View(model);
            }

            // Login logic here...

            return Redirect(returnUrl ?? "/");
        }
    }
}

以上就是ASP.NET图片验证码的HtmlHelper的完整攻略,希望能够帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net 图片验证码的HtmlHelper - Python技术站

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

相关文章

  • C# 利用AForge实现摄像头信息采集

    接下来我将详细讲解“C#利用AForge实现摄像头信息采集”的完整攻略,包括以下几个部分。 简介 AForge.NET是一个开源的C#编写的开源计算机视觉库,能支持许多常见的图形和影像处理技术,如滤波、阈值、形态学运算、边缘检测、特征检测、接口的处理等等。 本攻略将详细介绍利用AForge.NET获取摄像头视频流,并将视频流进行处理的方法。 安装AForge…

    C# 2023年6月3日
    00
  • C#自动类型转换与强制类型转换的讲解

    我来详细讲解一下C#中的自动类型转换和强制类型转换。 自动类型转换 自动类型转换是指C#在程序运行时根据需要自动将一个数据类型转换为另一个数据类型,也称为隐式类型转换。自动类型转换规则如下: 将一个小范围类型的值赋给大范围类型的变量时,会发生自动转换。例如,将int类型的值赋值到long类型的变量中。 将一种不同的数据类型赋给另一种数据类型时,会进行自动转换…

    C# 2023年5月15日
    00
  • ASP.NET MVC使用正则表达式验证手机号码

    ASP.NET MVC使用正则表达式验证手机号码的完整攻略如下: 首先,在Model中定义一个手机号码属性。在Models文件夹中,打开要添加手机号码属性的类,然后添加以下代码: [RegularExpression(@"^1[3456789]\d{9}$", ErrorMessage = "请输入正确的手机号码")]…

    C# 2023年5月12日
    00
  • .NET Core系列之MemoryCache 缓存选项

    .NET Core系列之MemoryCache 缓存选项 在.NET Core中,MemoryCache是一种内存缓存,可用于缓存应用程序中的数据。MemoryCache提供了多种缓存选项,可以根据应用程序的需求进行配置。本攻略将介绍MemoryCache的缓存选项,包括缓存过期、缓存优先级、缓存回调等,并提供两个示例说明。 缓存过期 在MemoryCach…

    C# 2023年5月16日
    00
  • Node.js实现Excel转JSON

    下面是“Node.js实现Excel转JSON”的完整攻略。 一、安装依赖模块 在开始使用Node.js进行Excel转JSON之前,需要安装一些必要的模块。打开命令行工具,输入以下命令: npm install xlsx 这将会安装一个名为xlsx的模块,该模块可以让Node.js读取和写入Excel文件。 二、实现Excel转JSON Step 1:读取…

    C# 2023年6月1日
    00
  • asp.net中水印的具体实现代码

    实现 ASP.NET 中水印的具体步骤如下: 步骤1:在页面中引用 JavaScript 和 CSS 文件 首先,在页面头部引用以下两个文件: <link rel="stylesheet" type="text/css" href="watermark.css" /> <scrip…

    C# 2023年5月31日
    00
  • 基于SqlSugar的开发框架循序渐进介绍(27)– 基于MongoDB的数据库操作整合

    SqlSugar的开发框架本身主要是基于常规关系型数据库设计的框架,支持多种数据库类型的接入,如SqlServer、MySQL、Oracle、PostgreSQL、SQLite等数据库,非关系型数据库的MongoDB数据库也可以作为扩展整合到开发框架里面,通过基类的继承关系很好的封装了相关的基础操作功能,极大的减少相关处理MongoDB的代码,并提供很好的开…

    C# 2023年4月17日
    00
  • C# File.ReadAllBytes(string path):读取指定文件的所有字节内容

    File.ReadAllBytes(string path)是C#中一个用于读取指定文件的字节流并将其以字节数组的形式返回的方法。 作用: 该方法用于将指定文件中的所有字节读入一个字节数组中,并返回该字节数组。可以使用此方法来读取任何类型的文件,包括图像、声音和文本文件等。 使用方法攻略: 要使用File.ReadAllBytes方法,需要在代码中使用以下命…

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