Heim  >  Artikel  >  Backend-Entwicklung  >  Ein Beispiel dafür, wie asp.net ashx verwendet, um grafische Bestätigungscodes zu generieren

Ein Beispiel dafür, wie asp.net ashx verwendet, um grafische Bestätigungscodes zu generieren

黄舟
黄舟Original
2017-07-26 15:29:171464Durchsuche

In diesem Artikel wird hauptsächlich die Methode von asp.net zum Generieren von grafischem Verifizierungscode vorgestellt. Er analysiert die Schritte, Implementierungsmethoden und zugehörigen Vorsichtsmaßnahmen von asp.net zum Generieren von grafischem Verifizierungscode in Form von Beispielen siehe es

Das Beispiel in diesem Artikel beschreibt, wie asp.net ashx verwendet, um grafische Verifizierungscodes zu generieren. Ich teile es Ihnen als Referenz mit, die Details sind wie folgt:

Ich muss die Vorteile von Verifizierungscodes nicht erklären, Sie alle wissen es. Ich habe im Internet gesehen, dass jemand den Bestätigungscode direkt in die ASPX-Seite geschrieben hat, was bedeutet, dass das Anfordern des Bestätigungscodes auf diese Weise dem Anfordern einer Seite entspricht. Dies ist sehr unwissenschaftlich. Wie unten gezeigt


<form id="form1" runat="server">
  <p>
    <asp:Image ID="Image1" runat="server" ImageUrl="Default.aspx" />
    <br />
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
  </p>
</form>

Wenn ich mir diesen Code ansehe, habe ich das Gefühl, dass die Person, die den Code geschrieben hat, eine Tracht Prügel verdient. Es ist wirklich deprimierend, den Code so zu schreiben. Überprüfen Sie es und schreiben Sie kein Skript zum Wechseln.

Lassen Sie mich eine Möglichkeit vorstellen, eine solche Funktion zu implementieren

1. Schreiben Sie einen Ashx, um einen grafischen Bestätigungscode zu generieren


using System;
using System.Collections;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.SessionState;
using System.Drawing;
namespace usechecknum.ashx
{
  /// <summary>
  /// $codebehindclassname$ 的摘要说明
  /// </summary>
  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  public class doCreateNum : IHttpHandler,IRequiresSessionState
  {
    public void ProcessRequest(HttpContext context)
    {
      context.Response.ContentType = "text/html";
      string checkCode = GetValidation(5); // 产生5位随机验证码字符
      context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
      System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
      Graphics g = Graphics.FromImage(image);
      try
      {
        //生成随机生成器
        Random random = new Random();
        //清空图片背景色
        g.Clear(Color.White);
        // 画图片的背景噪音线
        int i;
        for (i = 0; i < 25; i++)
        {
          int x1 = random.Next(image.Width);
          int x2 = random.Next(image.Width);
          int y1 = random.Next(image.Height);
          int y2 = random.Next(image.Height);
          g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
        }
        Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
        System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
        g.DrawString(checkCode, font, brush, 2, 2);
        //画图片的前景噪音点
        g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        context.Response.ClearContent();
        context.Response.ContentType = "image/Gif";
        context.Response.BinaryWrite(ms.ToArray());
      }
      finally
      {
        g.Dispose();
        image.Dispose();
      }
    }
    public string GetValidation(int num)
    {
      string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //"或者写汉字也行"
      string validatecode = "";
      Random rd = new Random();
      for (int i = 0; i < num; i++)
      {
        validatecode += str.Substring(rd.Next(0, str.Length), 1);
      }
      return validatecode;
    }
    public bool IsReusable
    {
      get
      {
        return false;
      }
    }
  }
}

2. Zeigen Sie den Bestätigungscode auf der Seite an, wir können ihn direkt in das 79d7c95122630a3791db16c5259dc98d-Tag schreiben


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="usechecknum._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>验证码的使用</title>
</head>
<script language="javascript" type="text/javascript">
  function changeCode() {
    var imgNode = document.getElementById("vimg");
    imgNode.src = "ashx/doCreateNum.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题
  }
  </script>
<body>
  <form id="form1" runat="server">
   请输入验证码:<input type="text" name="checknum"/><img src="ashx/doCreateNum.ashx" id="vimg" onclick="changeCode()" />
  </form>
</body>
</html>

Nach langem Gespräch ist es an der Zeit, zu sehen, wie der generierte Bestätigungscode aussieht

Das obige ist der detaillierte Inhalt vonEin Beispiel dafür, wie asp.net ashx verwendet, um grafische Bestätigungscodes zu generieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn