1.方式一:

public class VCode
{
/// <summary>
/// 生成验证码图片 字节数组
/// </summary>
/// <returns></returns>
public byte[] GetVCode()
{
using (Image img = new Bitmap(90, 30))
{
string strCode = GetRandomStr();
HttpContext.Current.Session["vcode"] = strCode;
using (Graphics g = Graphics.FromImage(img))
{
g.Clear(Color.White);
g.DrawRectangle(Pens.Blue, 0, 0, img.Width - 1, img.Height - 1);
DrawPoint(g);
g.DrawString(strCode, new Font("微软雅黑", 15), Brushes.Blue, new PointF(5, 2));
DrawPoint(g);
using (System.IO.MemoryStream ms = new MemoryStream())
{
//将图片 保存到内存流中
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
//将内存流 里的 数据 转成 byte 数组 返回
return ms.ToArray();
}
}
}
return null;
} Random random = new Random();
/// <summary>
/// 生成随机数
/// </summary>
/// <returns></returns>
string GetRandomStr()
{
string str = string.Empty;
string[] strArr = { "再", "N", "B", "的", "梦", "想", "也", "抵", "不", "过", "S", "B", "一", "样", "的" ,"坚","持"};
for (int i = 0; i < 4; i++)
{
int index = random.Next(strArr.Length);
str += strArr[index];
}
return str;
}
/// <summary>
/// 画线段
/// </summary>
/// <param name="g"></param>
void DrawPoint(Graphics g)
{
Pen[] pens = { Pens.Blue, Pens.Black, Pens.Red, Pens.Green };
Point p1;
Point p2;
int length = 1;
for (int i = 0; i < 50; i++)
{
p1 = new Point(random.Next(79), random.Next(29));
p2 = new Point(p1.X - length, p1.Y - length);
length = random.Next(5);
g.DrawLine(pens[random.Next(pens.Length)], p1, p2);
}
}
}

调用:

方式二:

使用一般处理程序

ValidateCode.ashx下载

调用

3.得出结论

原来mvc中也是可以用一般处理程序的,因为mvc与webform用的是同一天asp.net框架。当请求到达请求管道的时候,在第七个事件中,看请求有没有实现mvchandler接口,如果没有就跳过第七个事件,进入第八个事件,在第8个事件中,创建一般处理程序对象,然后在第11和12事件之间,调用对象的PR()方法

MVC系列学习(十五)-验证码的更多相关文章

  1. MVC系列学习(十六)-区域的学习

    1.查找控制器的过程 1.1调用其他项目中的控制器 a.先到网站根目录下的bin文件夹下,遍历所有的程序集 b.找到以Controller结尾的类 c.再找出其中继承了Controller的类 d.接 ...

  2. MVC系列学习(十四)-路由规则及路由调试工具

    1.本次学习的代码,比较简单,就是在路由配置文件中,添加一个路由信息:同时添加一个相应的控制器及视图 控制器中代码如下 即有两条路由匹配规则,一个Kim控制器,该控制器下有个Index的方法,和一个对 ...

  3. MVC系列学习(十二)-服务端的验证

    在前一讲,提到过,客户端的东西永远可以造假,所以我们还要在服务端进行验证 注意:先加载表单,后添加js文件,才能有效:而先加载js,后添加表单,是没有效果的 1.视图与Model中的代码如下 2.一张 ...

  4. MVC系列学习(十)-生成URL与表单

    本次学习,在路由配置信息中,有两个路由规则,在网站第一次启动的时候,注册了两个路由表 1.动态生成url A.在路由规则中,因为Default在前面,所以最新找到该路由表,此时不管 自己定义的控制器名 ...

  5. 如鹏网学习笔记(十五)ASP.NET MVC核心基础笔记

    一.ASP.Net MVC简介 1,什么是ASP.NET MVC? HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大.工作量大.因此提供了ASP. ...

  6. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  7. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  8. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  9. VS2017十五项新功能体验

    Visual Studio 2017十五项新功能体验 Visual Studio 2017正式已经于2017.3.7号正式发布,选在这一天发布也是为了纪念Visual Studio 二十周年.MVP ...

随机推荐

  1. unigui+fastreport 打印【4】

    1.建立一个uniForm,用于建立FastReport打印界面.在Form上增加uniFrame.和传统的的报表打印设计一样一样的. 2.在beofeShow事情中: procedure TUniF ...

  2. Leetcode 22.生成括号对数

    生成括号对数 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n =3,生成结果为: [ "((()))", "( ...

  3. android调试

    要进行调试,首先构建app的时候必须选择是Debug模式,而不能是Release模式. 接下来的内容转载自: http://www.cnblogs.com/gaoteng/p/5711314.html ...

  4. spring项目启动需要的几个注解

    1.@ComponentScan注解,spring context包下,可以理解嘛,扫描srping bean放在ioc容器中的. ApplicationContext是接口,就是IOC容器嘛,也在这 ...

  5. bzoj1072【SCOI2007】排列perm

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1479  Solved: 928 [id=1072&q ...

  6. 从理论到实践,全方位认识DNS(实践篇)

    在理论篇中,我们基本了解了DNS的整个协议原理,但是可能还会有着下面的疑问: 为什么我想申请的域名都没了? DNS 域名还要备案,这是为什么啊? 如何将刚申请的域名绑定到自己的网站呢? 怎么才能看到那 ...

  7. SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件

    SuperSwipeRefreshLayout 一个功能强大的自己定义下拉刷新组件. Why? 下拉刷新这样的控件.想必大家用的太多了,比方使用非常多的XListView等. 近期.项目中非常多列表都 ...

  8. C++成员对齐方式探讨

    本文參考了<高质量程序设计指南--C++/C语言>一书 有不妥之处恳请指正 一.自然对齐 某些基于RISC(精简指令集)的CPU比方SPARC.PowerPC等.採用高字节和高字在低地址存 ...

  9. CentOS yum时出现“Could not retrieve mirrorlist ”的解决的方法——resolv.conf的配置

    原因:没有配置resolv.conf 解决方法: 到/etc文件夹下配置resolv.conf增加nameserver IP,如: nameserver 8.8.8.8 nameserver 8.8. ...

  10. 【敬业福bug】支付宝五福卡敬业福太难求 被炒至200元

    016年央视春晚官方独家互动合作伙伴--支付宝,正式上线春晚红包玩法集福卡活动. 用户新加入10个支付宝好友,就可以获成3张福卡.剩下2张须要支付宝好友之间相互赠送.交换,终于集齐5张福卡就有机会平分 ...