MVC系列学习(十五)-验证码

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()方法

时间: 2024-10-11 00:24:10

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

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

本次学习,在路由配置信息中,有两个路由规则,在网站第一次启动的时候,注册了两个路由表 1.动态生成url A.在路由规则中,因为Default在前面,所以最新找到该路由表,此时不管 自己定义的控制器名 与 路由配置信息中默认的控制器名 是否相同,在浏览器中,都会全部显示.有路由表知,此时home为控制器index为Action方法 A1.同上 B1.采用动态生成url时,因为此时的 控制器名,action名 与 查到的路由表中的默认值相同,所以显示的时候,只显示 / B1.虽然控制器的名 与 默

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

1.查找控制器的过程 1.1调用其他项目中的控制器 a.先到网站根目录下的bin文件夹下,遍历所有的程序集 b.找到以Controller结尾的类 c.再找出其中继承了Controller的类 d.接着创建同名的对象,并调用Action方法 1.2当调用同名控制器时 知道了控制器是怎么找到了,那如果bin中有两个同名的控制器怎么办,先看看问题 解决方式 a.在路由配置信息中,在遍历控制器时,只到指定命名空间下查找 b.可以看到namespaces是一个数组,即可以指定多个命名空间,可以提高遍历速

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

在前一讲,提到过,客户端的东西永远可以造假,所以我们还要在服务端进行验证 1.视图与Model中的代码如下 2.一张图,来记忆,服务器端验证,为我们做了什么,原理发现多了一步 2.1情况一:客户端直接就不满足条件,那么就没有机会进行服务器端验证了 2.2情况二:客户端通过了浏览器端的验证,那么就要进行服务器端验证了

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

1.本次学习的代码,比较简单,就是在路由配置文件中,添加一个路由信息:同时添加一个相应的控制器及视图 控制器中代码如下 即有两条路由匹配规则,一个Kim控制器,该控制器下有个Index的方法,和一个对应Index视图 2.开始配置RouteDebugger 2.1下载程序集 RouteDebugger-2.1.3.0下载地址 2.2添加引用,并配置RouteDebugger 在网站根目录下的web.config文件中,在<appSetting></appSetting>节点中,添加

十五天精通WCF——第九天 高级玩法之自定义Behavior

原文:十五天精通WCF--第九天 高级玩法之自定义Behavior 终于我又看完了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面言归正传, 看看这个很有意思的Behavior. 一: Behavior这个泼妇的厉害   在前面的文章中,我也清楚的说明了整个wcf通信流,而Behavior这个泼妇可以在wcf通信流中的任何地方插上一脚,蛮狠无比,利用的好,让你上天堂,利用的不

【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能

原文:[.NET Core项目实战-统一认证平台]第十五章 网关篇-使用二级缓存提升性能 [.NET Core项目实战-统一认证平台]开篇及目录索引 一.背景 首先说声抱歉,可能是因为假期综合症(其实就是因为懒哈)的原因,已经很长时间没更新博客了,现在也调整的差不多了,准备还是以每周1-2篇的进度来更新博客,并完成本项目所有功能. 言归正传,本重构项目是在我根据实际需求重构,由于还未完全写完,所以也没进行压测,在2月份时,张善友老师给我留言说经过压测发现我重构的Ocelot网关功能性能较差,其中

每周进度条(第十五周)

第十五周进度条   第十五周 所花时间 1h 代码量(行)  100 博客量(篇)  1 学到的知识 对图片的处理 在Android程序中加入图片

秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回顾和总结,这篇文章对Windows系统下常用的线程同步互斥机制——关键段.事件.互斥量.信号量进行了总结.有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题.因此本文将对事件和信号量作个试验,看看事件和信号量能否处理“遗弃”问题. 一.

深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API

今天是六.一儿童节,祝小朋友们节日快乐!发完此文就带我家小朋友出去玩耍了. 第十五章 Zabbix 协议与API 本章将介绍和开发相关的Zabbix协议和API的内容,通过对Zabbix协议和API的深入了解,你可以利用Zabbix协议编写客户端程序并将其嵌入的产品或系统中,并将数据发送到Zabbix server,这在无法安装Zabbixagent等程序的场景(例如专用的嵌入式系统)中非常有用.你也可以利用Zabbix API开发自己的业务系统,或灵活的与现有系统整合集成. 15.1 Zabb