使用.Net Core实现的一个图形验证码功能

 更新时间:2021年12月16日 10:33:40   作者:1992w  
SimpleCaptcha是一个使用简单,基于.Net Standard 2.0的图形验证码模块。这篇文章主要介绍了使用.Net Core实现的一个图形验证码功能,需要的朋友可以参考下

SimpleCaptcha是一个使用简单,基于.Net Standard 2.0的图形验证码模块。它的灵感来源于Edi.Wang的这篇文章https://edi.wang/post/2018/10/13/generate-captcha-code-aspnet-core,我将其中生成验证码的代码抽取出来进行封装得到了这个模块。下面介绍一下使用方式。

基本使用方式

安装SimpleCaptcha

在Nuget中搜索安装SimpleCaptcha

安装缓存模块

SimpleCaptcha依赖Microsoft.Extensions.Caching.Abstractions模块用来存储验证码,所以你需要在项目中根据自己的需要安装相应的实现包,例如这里我使用Microsoft.Extensions.Caching.Memory

Startup

修改Startup.cs文件注入相应的服务:

services.AddMemoryCache()
    .AddSimpleCaptcha(builder =>
    {
        builder.UseMemoryStore();
    });

注入ICaptcha接口

在Controller中注入核心接口ICaptcha

private readonly ICaptcha _captcha;

public HomeController(ICaptcha captcha)
{
    _captcha = captcha;
}

生成验证码

使用ICaptcha接口的Generate方法生成验证码

public IActionResult Captcha(string id)
{
    var info = _captcha.Generate(id);
    var stream = new MemoryStream(info.CaptchaByteData);
    return File(stream, "image/png");
}

验证

使用ICaptcha接口的Validate方法对用户的提交进行验证

public IActionResult Validate(string id, string code)
{
    var result = _captcha.Validate(id, code);
    return Json(new { success = result });
}

完整的例子可以在这里找到:https://github.com/1992w/SimpleCaptcha/tree/master/src/SimpleCaptcha.Demo

配置

SimpleCaptcha预留了一些默认的配置项,你可以根据需要自行修改。

设置验证码长度

services.AddSimpleCaptcha(builder =>
{
    builder.AddConfiguration(options =>
    {
        options.CodeLength = 6;
    });
});

设置图片大小

services.AddSimpleCaptcha(builder =>
{
    builder.AddConfiguration(options =>
    {
        options.ImageWidth = 100;
        options.ImageHeight = 36;
    });
});

设置区分大小写

默认情况下验证不区分大小写

services.AddSimpleCaptcha(builder =>
{
    builder.AddConfiguration(options =>
    {
        options.IgnoreCase = false;
    });
});

设置验证码有效期

验证码默认的有效期为5分钟

services.AddSimpleCaptcha(builder =>
{
    builder.AddConfiguration(options =>
    {
        options.ExpiryTime =TimeSpan.FromMinutes(10);
    });
});

设置字符集

SimpleCaptcha提供了ICaptchaCodeGenerator接口用来生成字符,默认的实现是从字符集012346789ABCDEFGHIJKLMNOPQRSTUVWXYZ中随机生成,你可以继承ICaptchaCodeGenerator接口实现自己的需求。

public class MyCaptchaCodeGenerator : ICaptchaCodeGenerator
{
    public string Generate(int length)
    {
        throw new NotImplementedException();
    }
}

配置自己的生成器

services.AddSimpleCaptcha(builder =>
{
    builder.AddConfiguration(options =>
    {
        options.CodeGenerator = new MyCaptchaCodeGenerator();
    });
});

设置个性化的图片

如果默认生成的图片你觉得不符合你的要求,你可以实现ICaptchaImageGenerator接口进行修改

public class CaptchaImageGenerator : ICaptchaImageGenerator
{
    public byte[] Generate(int width, int height, string captchaCode)
    {
        throw new NotImplementedException();
    }
}

services.AddSimpleCaptcha(builder =>
{
    builder.AddConfiguration(options =>
    {
        options.ImageGenerator = new CaptchaImageGenerator();
    });
});

源代码

所有源代码可以在这里获取:https://github.com/1992w/SimpleCaptcha

到此这篇关于使用.Net Core实现的一个图形验证码的文章就介绍到这了,更多相关.Net Core图形验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • .Net MVC实现长轮询

    .Net MVC实现长轮询

    这篇文章主要为大家详细介绍了.Net MVC实现长轮询的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • asp.net core 实现一个简单的仓储的方法

    asp.net core 实现一个简单的仓储的方法

    本篇文章主要介绍了asp.net core 实现一个简单的仓储的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Asp.Net类库中发送电子邮件的代码

    Asp.Net类库中发送电子邮件的代码

    发送电子邮件是许多需要用户注册的网站的通用功能,通过正则表达式我们可以过滤掉不符合电子邮件格式的输入,但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址
    2008-09-09
  • 详解Asp.net Core 使用Redis存储Session

    详解Asp.net Core 使用Redis存储Session

    本篇文章主要介绍了Asp.net Core 使用Redis存储Session ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2016-12-12
  • Asp.net移除Server,X-Powered-By和X-AspNet-Version头

    Asp.net移除Server,X-Powered-By和X-AspNet-Version头

    这篇文章主要介绍了Asp.net移除Server, X-Powered-By, 和X-AspNet-Version头,移除X-AspNet-Version很简单,只需要在Web.config中增加相应配置节,感兴趣的朋友一起看看吧
    2024-02-02
  • 关闭子页面刷新父页面中部分控件数据的方法

    关闭子页面刷新父页面中部分控件数据的方法

    关闭子页面刷新父页面中部分控件数据,具体的实现代码如下,感兴趣的朋友可以参考下哈
    2013-05-05
  • asp.net 获取某个时间段的星期并以表格形式排列出来

    asp.net 获取某个时间段的星期并以表格形式排列出来

    今天遇到了个关于时间的操作,而作为初学者的我,并不是很了解时间函数的操作,所以就园里问了下别人,经别人的帮助我自己实现了如何在某个时间段获取星期。
    2010-03-03
  • Entity Framework根据实体的EntityState状态实现增删改查

    Entity Framework根据实体的EntityState状态实现增删改查

    这篇文章介绍了Entity Framework根据实体的EntityState状态实现增删改查,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 使用 .NET MAUI 开发 ChatGPT 客户端的流程

    使用 .NET MAUI 开发 ChatGPT 客户端的流程

    最近 chatgpt 很火,由于网页版本限制了 ip,还得必须开代理,用起来比较麻烦,所以我尝试用 maui 开发一个聊天小应用,结合 chatgpt 的开放 api 来实现,这篇文章主要介绍了使用 .NET MAUI 开发 ChatGPT 客户端,需要的朋友可以参考下
    2022-12-12
  • asp.net 文件下载的通用方法

    asp.net 文件下载的通用方法

    一则雕虫小技,记下备忘,以使同学们少走弯路。
    2009-06-06

最新评论