(此文章同时发表在本人微信公众号“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. 使用Axis2编写webservice客户端,服务端

    1.编写客户端 Axis2开发WebService客户端 的3种方式 [参考帖子] http://blog.csdn.net/wangjinwei6912/article/details/851259 ...

  2. (转)高性能网站架构之缓存篇—Redis集群增删节点

    标签: 高性能架构集群缓存redis 上一篇文章,我们搭建了Redis-cluster集群,这篇博客跟大家讲一下如何在一个运行的集群上增加节点或者删除节点. Redis集群添加节点 首先我们要新建立一 ...

  3. 2小时入门Robot Framework

    1.介绍 1.1.介绍Robot Robot Framework是一个基于关键字驱动的自动化测试框架.通过该框架,测试人员可使用python封装关键字,并在非代码环境下使用关键字构建可被执行的测试用例 ...

  4. 4.js模式-发布-订阅模式

    1. 发布-订阅模式 var observe = (function(){ var events = {}, listen, trigger, remmove; listen = function(k ...

  5. Log4j的使用

    一,Log4j简介 日志的三个目的: 1. 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作                      2.跟踪代码运行时轨迹,作为日后审计的依 ...

  6. August 16th 2016 Week 34th Tuesday

    The worst solitude is to be destitute of sincere friendship. 最大的孤独莫过于没有真诚的友谊. Sometimes we pay the m ...

  7. Apache 的 httpd.conf 详解

    ServerRoot “/usr/local“ ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是 ...

  8. 项目之solr全文搜索工具之创建项目索引库

    以创建项目baotao core为例 1.  在example目录下创建baotao-solr文件夹: 2.  将./solr下的solr.xml拷贝到baotao-solr目录下: 3.  在bao ...

  9. Mysql之多源复制

    在复制时,可以有多个Master.这些Master不进行冲突检查拓扑到Slave.在使用多源复制时对Slave的表存储格式是有要求的,必须要基于table存储而非文件存储[require table ...

  10. 20145206实验四《Android开发基础》

    20145206 实验四<Android开发基础> 实验内容 ·安装Android Studio ·运行安卓AVD模拟器 ·使用安卓运行出虚拟手机并显示HelloWorld以及自己的学号 ...