(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:由于ASP.NET 5及MVC 6是一个微软全新重新的Web开发平台,之前一些现有的验证码库已经不能直接使用,故而我自行实现了一套简单的验证码库——CaptchaMVC6。

CaptchaMVC6我已经开源到GitHub上(同时提供了使用范例给大家参考),大家可以通过“阅读原文”来访问项目页面。

CaptchaMVC6虽然一些核心的一些算法和现有的验证码库没有本质区别,不过整个封装方式充分利用了ASP.NET 5和MVC 6的新特性:

  • 使用ASP.NET 5中间件来实现验证码图片的渲染,之前常见的方式一般采用HttpHandler、HttpModule或者直接使用ASP.NET MVC的控制器。相关代码见:CaptchaMiddleware.cs、CaptchaMiddlewareExtensions.cs
  • 基于TagHelper简化视图中的处理。比如显示验证码图片,常规做法是约定一个地址,并在img元素中直接给src设定服务端验证码图片渲染地址。而通过TagHelper,只需要在img元素中添加一个自定义属性即可。另外,也通过TagHelper来控制验证码要不要显示(见下)。相关代码见:CaptchaTagHelper.cs
  • 基于ASP.NET 5的依赖注入机制,可以方便替换验证码生成算法(当然我也提供了一个简单的默认算法)。相关代码见:CaptchaServiceCollectionExtensions.cs、DefaultCodeGenerator.cs、DefaultGraphicGenerator.cs

除了上面的这些利用新特性的地方,CaptchaMVC6还有额外的两个特点:

  1. 基于ValidationAttribute来封装在服务端对验证码有效性的算法,即要验证有效性只需要给视图模型附加一个标记。相关代码见:CaptchaAttribute.cs
  2. 实现了简单的验证码是否启用的控制机制(通过Session来记录是否要开启)。相关代码见:CaptchaControlTagHelper.cs

在使用范例中,我演示了两种使用场景:

  1. 注册的时候,必须输入验证码方能完成注册。相关代码见:AccountViewModels.cs中的RegisterViewModel类、Register.cshtml
  2. 登录的时候,一开始可以不用输入验证码,如果出错两次后,就要输入验证码。相关代码见:AccountViewModels.cs中的LoginViewModel类、Login.cshtml、AccountController.cs中的Login方法

需要注意的是,由于CaptchaMVC6使用到了System.Drawing这个程序集,所以暂时无法运行在dnxcore50之上,即无法跨平台。并且这个还是一个最初的版本,需要完善的地方还有很多。另外,我接下来也会尽快提供Nuget包,供大家方便使用。

项目地址:https://github.com/heavenwing/CaptchaMVC6

ASP.NET 5探险(8):利用中间件、TagHelper来在MVC 6中实现Captcha的更多相关文章

  1. ASP.NET 5探险(3):使用UMEditor并实现图片上传

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:今天将继续上一篇来讲解百度富文本Web编辑器UEditor或UMEditor的使用. ...

  2. Asp.Net Core 轻松学-利用文件监视进行快速测试开发

    前言     在进行 Asp.Net Core 应用程序开发过程中,通常的做法是先把业务代码开发完成,然后建立单元测试,最后进入本地系统集成测试:在这个过程中,程序员的大部分时间几乎都花费在开发.运行 ...

  3. ASP.net 资源请求漏洞利用工具PadBuster

    ASP.net 资源请求漏洞利用工具PadBuster 在ASP.net 网站中,为了便于部署网站项目,开发者往往会将资源(图片.Javascript文件)嵌入到dll文件中.而网页中,会使用WebR ...

  4. ASP.NET Core 2.2在中间件内使用有作用域的服务

    服务生存期 为每个注册的服务选择适当的生存期.可以使用以下生存期配置ASP.NET Core服务: 暂时 暂时生存期服务 (AddTransient) 是每次从服务容器进行请求时创建的. 这种生存期适 ...

  5. Asp.Net Core入门之自定义中间件

    什么是中间件? 这里引用官方解释: 中间件是用于组成应用程序管道来处理请求和响应的组件.管道内的每一个组件都可以选择是否将请求交给下一个组件.并在管道中调用下一个组件之前和之后执行某些操作.请求委托被 ...

  6. asp.net core 3.1 自定义中间件实现jwt token认证

    asp.net core 3.1 自定义中间件实现jwt token认证 话不多讲,也不知道咋讲!直接上代码 认证信息承载对象[user] /// <summary> /// 认证用户信息 ...

  7. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(三):创建使用[ClientCredentials客户端凭证]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建 ...

  8. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建API项目,配置IdentityServer保护API资源

    配套源码:https://gitee.com/jardeng/IdentitySolution 接上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(一):搭 ...

  9. ASP.NET 5探险(6):升级ASP.NET 5到beta6

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软根据ASP.NET 5的路线图如期发布了beta6,现在我们就来说说beta5升级 ...

随机推荐

  1. python查找并删除相同文件-UNIQ File-wxPython-v6

    相比第一版,新增:菜单,对话框,文件过滤器,操作结果保存,配置功能(自己写了一个读写配置文件的功能),提示语优化,模块分化更合理. 截图: 源代码: UniqFile-wxPython-v6.py: ...

  2. TextMate 小小心得

    在Vim.Emacs之间纠结了很久之后,却选择了TextMate P.S. 为何Emacs和Vim被称为两大神器 中文的资料不是很多,一狠心,找了James Edward Gray II的TextMa ...

  3. Redis系列-配置文件小结

    如果不指定配置文件,Redis也可以启动,此时,redis使用默认的内置配置.不过在正式环境,常常通过配置文件[通常叫redis.conf]来配置redis. redis.conf配置格式如下: ke ...

  4. Git打包文件

    原文: http://gitbook.liuhui998.com/7_5.html 一.打包文件索引 首先, 我们来看一下打包文件索引, 基本上它只是一系列指向打包文件内位置的书签. 打包文件索引有两 ...

  5. FreeRTOS--删除任务

    FreeRTOS学习笔记——任务删除 vTaskDelete() API - liyan728的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liyan728/a ...

  6. 解决Django发送中文邮件时的编码及乱码问题

    参考自---http://blog.csdn.net/clh604/article/details/9274793 #-*- coding=utf8 -*- from email.message im ...

  7. How to call getClass() from a static method in Java?

    刚才在学习Java 使用properties类,遇到这样的错误: Cannot make a static reference to the non-static method getClass() ...

  8. 9.nodejs权威指南--Socket.IO

    1. Socket.IO 1.1 服务器 var http = require('http'); var sio = require('socket.io'); var fs = require('f ...

  9. 在Linux下记录所有用户的登录和操作日志

    一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作的. 在这里我们通 ...

  10. uva 489.Hangman Judge 解题报告

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...