为可视化WebGUI创建验证器

分享于 

4分钟阅读

Web开发

  繁體

介绍

我目前开发一个使用 Visual WebGUI和 C# 作为编程语言的系统。 有关可视 WebGUI ( WGX )的详细信息,请点击这里查看。 我需要一个机制来验证网站的注册是由人人完成的,而不是一些垃圾邮件机器人或者脚本。 这就是captcha的。

问题

问题是我找不到任何已经存在的captcha可视 WebGUI。 我有两个选择:

  • 使用 AspControlBoxBase 控件将现有的ASP页嵌入到表单/页中。
  • 开发可视化WebGUI控件。

作为一个真正的技术人员,因为各种原因( 主要是因为我认为这是个挑战) 我选择了选择 2.

更多关于 captcha

在CodeProject上,我发现了 ,这是关于captcha的更多解释。 本质上,to是一个混乱文本的像素矩阵,使得使用一些OCRs来从图像中提取文本非常困难。 captcha是一个完整的科学。 有些是非常复杂的,有针对视障人士的特殊功能,还有文字转换器。 但是,这不是本文的重点。

简而言之,我们需要一些将文本转换为captcha图像的something。

WGX网关处理程序

首先,我对WGX控件进行了一些搜索,发现本文介绍了如何开发可视化WGX网关处理程序,我决定将网关和WGX控件结合使用。

网关处理程序是类和控件处理浏览器对浏览器的HTTP响应的一种聪明方法。 HTTP处理程序可以对浏览器响应任何类型的数据。

可以通过在类中实现 IGatewayControl 接口来创建网关句柄

IGatewayHandler IGatewayControl.GetGatewayHandler(IContext objContext, 
 string strAction)
{
 //here we write html or data to HttpContext.Current.// Response.OutputStream that wil end up in the browser}

WGX控件

由于capthca是从一些文本转换成一个经过加密的图像,我决定创建一个新的控件,并从现有的WGX PictureBox。 你知道- PictureBox 已经有 Text 属性,因为它从 Control 派生。

所以,大部分工作已经完成了。 我所要做的就是把 PictureBox 控件与网关处理程序 下一步是创建一个从 PictureBox 派生的WebGUI控件,该控件实现一个 IGatewayControl

publicclass Captcha : PictureBox, IGatewayControl
{
 publicvoid RenderImage()
 {
 //this is called to render the image based //on the Text property of the control }
}

新控件

这是我们最后的课程。 非常简单非常简单。

publicclass Captcha : PictureBox, IGatewayControl
{
 public Captcha()
 {
 }
 publicvoid RenderImage()
 { 
 this.Image = new GatewayResourceHandle(new GatewayReference(this, "image"));
 // img.Image;this.Update();
 } 
 IGatewayHandler IGatewayControl.GetGatewayHandler(IContext objContext, 
 string strAction)
 {
 CaptchaImage img = new CaptchaImage(this.Text, this.Width, this.Height);
 img.Image.Save(HttpContext.Current.Response.OutputStream, 
 System.Drawing.Imaging.ImageFormat.Jpeg);
 returnnull;
 }
}

我们怎么用它

将验证码控制代码添加到项目中并编译你的项目。 编译完项目后,验证码将出现在 Visual Studio 控件工具箱中。

将控件拖到窗体上。 然后,根据需要更改高度和宽度。

为了更新和刷新Captcha图像,调用函数 below。 ( 记得从 PageLoad 事件或者构造函数中的InitializeComponent() 调用它。)

privatevoid SetCapthca()
{
 captchaMain.Text = "vn0y8";//or some other sandom text generator captchaMain.RenderImage();
}

屏幕截图

这将显示控件中控件属性的Text的一个经过加密的图像:

screenshot.png


WEB  vis  cap  验证码  visual-web