asp.net mvc 控制器返回验证码

下面是一个输出验证码的类,将验证码的流信息输入到内存中即可
      /// <summary> 
        /// 输出图片到内存 
        /// </summary> 
        /// <param name="validatecode"></param> 
        /// <param name="context"></param> 
        public MemoryStream CreatValidateGraphcs(string validatecode) 
        { 
            Bitmap bitm = new Bitmap((int)Math.Ceiling(validatecode.Length * 20.0), 40); 
            using (Image codeimg = bitm) 
            { 
                Graphics g = Graphics.FromImage(codeimg); 
                //情况背景为白色 
                g.Clear(Color.White); 
                //画随机线和躁点 
                Random rd = new Random(); 
                for (int i = 0; i < 100; i++) 
                { 
                    //生产随机四线条 
                    int x1 = rd.Next(codeimg.Width); 
                    int y1 = rd.Next(codeimg.Height); 
                    int x2 = rd.Next(codeimg.Width); 
                    int y2 = rd.Next(codeimg.Height); 
                    g.DrawLine(new Pen(Color.FromArgb(rd.Next(20, 245), rd.Next(20, 245), rd.Next(20, 245))), x1, y1, x2, y2); 
                } 
                //画躁点图案,绘制1000个躁点 
                for (int i = 0; i < 1000; i++) 
                { 
                    int x1 = rd.Next(codeimg.Width); 
                    int y1 = rd.Next(codeimg.Height); 
                    bitm.SetPixel(x1, y1, Color.FromArgb(rd.Next(20, 245), rd.Next(20, 245), rd.Next(20, 245))); 
                } 
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, codeimg.Width, codeimg.Height), 
                Color.Blue, Color.DarkRed, 1.2f, true); 
                g.DrawString(validatecode, new Font("宋体", 20, FontStyle.Bold | FontStyle.Italic | FontStyle.Strikeout), brush, new Point(3, 3)); 
                //绘制边界线 
                g.DrawRectangle(new Pen(Color.SaddleBrown), 0, 0, codeimg.Width - 1, codeimg.Height - 1); 
                //将图片保存到内存流 
                MemoryStream ms = new MemoryStream(); 
                codeimg.Save(ms, ImageFormat.Gif); 
                //context.Response.Clear(); 
                //context.Response.BinaryWrite(ms.ToArray()); 
                return ms; 
            } 
        }
    然后在控制器中返回内存流、用FIle来返回,和以前的一般处理程序有小区别,不过并不难就差了俩句代码而已。
        /// <summary> 
        /// 读取验证码 
        /// </summary> 
        /// <returns></returns> 
        public ActionResult GetLoginCode() 
        { 
            CodeValidate cv=new CodeValidate(); 
            Random r = new Random(); 
            int nm = r.Next(1000, 9999); 
            //保存验证码到cookie和session 
            //Response.AppendCookie(new HttpCookie("code", nm.ToString())); 
            MemoryStream ms=cv.CreatValidateGraphcs(nm.ToString()); 
            Session["code"] = nm; 
            return File(ms.ToArray(),"image/gif"); 
        }

posted on 2016-03-16 10:49  forgive-me  阅读(98)  评论(0编辑  收藏  举报

导航