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) 编辑 收藏 举报