asp.net 一般处理程序 .ashx 处理各种验证码 一维码 二维码

用到的一个加密方法和一个解密算法

public class H
    {
        private string key;

        public H()
        {
            this.key = "hhhhhhh1";
        }
        /// <summary>
        /// H
        /// </summary>
        /// <param name="key">加密密钥,要求为8位</param>
        public H(string key)
        {
            this.key = key;
        }
        /// <summary>
        /// DES解密字符串 
        /// </summary>
        /// <param name="s">待解密的字符串</param>
        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
        public string Decrypt(string s)
        {
            return this.Decrypt(s, this.key);
        }

        private string Decrypt(string pToDecrypt, string sKey)
        {
            try
            {
                DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
                byte[] buffer = new byte[pToDecrypt.Length / 2];
                for (int i = 0; i < (pToDecrypt.Length / 2); i++)
                {
                    int num2 = Convert.ToInt32(pToDecrypt.Substring(i * 2, 2), 0x10);
                    buffer[i] = (byte)num2;
                }
                provider.Key = Encoding.ASCII.GetBytes(sKey);
                provider.IV = Encoding.ASCII.GetBytes(sKey);
                MemoryStream stream = new MemoryStream();
                CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
                stream2.Write(buffer, 0, buffer.Length);
                stream2.FlushFinalBlock();
                new StringBuilder();
                return Encoding.Default.GetString(stream.ToArray());
            }
            catch
            {
                return pToDecrypt;
            }
        }
        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="s">待加密的字符串</param>
        /// <returns>返回加密后的字符串,失败返回源串</returns>
        public string Encrypt(string s)
        {
            return this.Encrypt(s, this.key);
        }

        private string Encrypt(string pToEncrypt, string sKey)
        {
            try
            {
                DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
                byte[] bytes = Encoding.Default.GetBytes(pToEncrypt);
                provider.Key = Encoding.ASCII.GetBytes(sKey);
                provider.IV = Encoding.ASCII.GetBytes(sKey);
                MemoryStream stream = new MemoryStream();
                CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
                stream2.Write(bytes, 0, bytes.Length);
                stream2.FlushFinalBlock();
                StringBuilder builder = new StringBuilder();
                foreach (byte num in stream.ToArray())
                {
                    builder.AppendFormat("{0:X2}", num);
                }
                builder.ToString();
                return builder.ToString();
            }
            catch
            {
                return pToEncrypt;
            }
        }
    }
对了还需要一个随机生成验证字符串的方法

/// <summary>
    /// 生成随机字母字符串(数字字母混和)
    /// </summary>
    /// <param name="codeCount">待生成的位数</param>
    /// <param name="rep">初始可更改参数,调用需要加关键词ref</param>
    /// <returns>生成的字母字符串</returns>
    public static string GenerateCheckCode(int codeCount, ref int rep)
    {
        string str = string.Empty;
        long num2 = DateTime.Now.Ticks + rep;
        rep++;
        Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
        for (int i = 0; i < codeCount; i++)
        {
            char ch;
            int num = random.Next();
            if ((num % 2) == 0)
            {
                ch = (char)(0x30 + ((ushort)(num % 10)));
            }
            else
            {
                ch = (char)(0x41 + ((ushort)(num % 0x1a)));
            }
            str = str + ch.ToString();
        }
        return str;
    }


一:用一般处理程序返回一张验证码图片

创建getCheckCode.ashx

<%@ WebHandler Language="C#" Class="getCheckCode" %>

using System;
using System.Web;
using System.Text;
using System.Drawing;
using System.IO;
using System.Drawing.Drawing2D;
using Controls;

public class getCheckCode : IHttpHandler,System.Web.SessionState.IRequiresSessionState
{

    public void ProcessRequest(HttpContext context)
    {
        String data = context.Request["vCode"];
        H h = new H();
        string decode = h.Decrypt(data);//解密
        //string _code = GenerateCheckCodes(6);
        System.Drawing.Image image = CreateCheckCodeImage(decode);
        System.IO.MemoryStream MStream = new System.IO.MemoryStream();
        image.Save(MStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        context.Response.ClearContent();
        context.Response.ContentType = "image/jpeg";
        context.Response.BinaryWrite(MStream.ToArray());
        MStream.Dispose();

        context.Response.Flush();
        context.Response.End();
        
    }
    public string GenerateCheckCodes(int iCount)
    {
        int number;
        string checkCode = String.Empty;
        int iSeed = DateTime.Now.Millisecond;
        System.Random random = new Random(iSeed);
        for (int i = 0; i < iCount; i++)
        {
            number = random.Next(10);
            checkCode += number.ToString();
        }
        return checkCode;
    }
    private Image CreateCheckCodeImage(string checkCode)
    {
        //Image image1;
        //if (string.IsNullOrEmpty(checkCode)) return image1;
        int iWordWidth = 15;
        int iImageWidth = checkCode.Length * iWordWidth;
        Bitmap image = new Bitmap(iImageWidth, 20);
        Graphics g = Graphics.FromImage(image);
        //生成随机生成器 
        Random random = new Random();
        //清空图片背景色 
        g.Clear(Color.White);

        //画图片的背景噪音点
        for (int i = 0; i < 20; 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);
        }

        //画图片的背景噪音线 
        for (int i = 0; i < 2; i++)
        {
            int x1 = 0;
            int x2 = image.Width;
            int y1 = random.Next(image.Height);
            int y2 = random.Next(image.Height);
            if (i == 0)
            {
                g.DrawLine(new Pen(Color.Gray, 2), x1, y1, x2, y2);
            }

        }


        for (int i = 0; i < checkCode.Length; i++)
        {

            string Code = checkCode[i].ToString();
            int xLeft = iWordWidth * (i);
            random = new Random(xLeft);
            int iSeed = DateTime.Now.Millisecond;
            int iValue = random.Next(iSeed) % 4;
            if (iValue == 0)
            {
                Font font = new Font("Arial", 13, (FontStyle.Bold | System.Drawing.FontStyle.Italic));
                Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
                LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.Red, 1.5f, true);
                g.DrawString(Code, font, brush, xLeft, 2);
            }
            else if (iValue == 1)
            {
                Font font = new System.Drawing.Font("楷体", 13, (FontStyle.Bold));
                Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
                LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.DarkRed, 1.3f, true);
                g.DrawString(Code, font, brush, xLeft, 2);
            }
            else if (iValue == 2)
            {
                Font font = new System.Drawing.Font("宋体", 13, (System.Drawing.FontStyle.Bold));
                Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
                LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Green, Color.Blue, 1.2f, true);
                g.DrawString(Code, font, brush, xLeft, 2);
            }
            else if (iValue == 3)
            {
                Font font = new System.Drawing.Font("黑体", 13, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Bold));
                Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
                LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.Green, 1.8f, true);
                g.DrawString(Code, font, brush, xLeft, 2);
            }
        }
        //画图片的前景噪音点 
        //for (int i = 0; i < 8; i++)
        //{
        //    int x = random.Next(image.Width);
        //    int y = random.Next(image.Height);
        //    image.SetPixel(x, y, Color.FromArgb(random.Next()));
        //}
        //画图片的边框线 
        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);
        return image;
    }
    public bool IsReusable {
        get {
            return false;
        }
    }

}

写一个.aspx页面调用这个.ashx页面

页面需要一个图片控件

<asp:Image ID="imgCheck" runat="server" />
后台.aspx.cs代码

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            int aa = 23;//任意值
            string vcode = GenerateCheckCode(4, ref aa);
            H h = new H();
            string encode = h.Encrypt(vcode);//加密
            //string decode = h.Decrypt(encode);//解密

            imgCheck.ImageUrl = "getCheckCode.ashx?vCode=" + encode;
            
        }
    }

二:一维码,39码

一般处理程序.ashx

<%@ WebHandler Language="C#" Class="GetCode" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Collections;
using System.Drawing;

public class GetCode : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        string _codeText = string.Empty;
        string _Magnify = string.Empty;
        string _height = string.Empty;
        if (context.Request["vCode"] != null) _codeText = context.Request["vCode"].ToString().Trim();
        if (context.Request["m"] != null) _Magnify = context.Request["m"].ToString();
        if (context.Request["h"] != null) _height = context.Request["h"].ToString();
        _codeText = string.IsNullOrEmpty(_codeText) ? "123ABC4567890FWF" : _codeText;
        _Magnify = string.IsNullOrEmpty(_Magnify) ? "0" : _Magnify;
        _height = string.IsNullOrEmpty(_height) ? "60" : _height;
        this.Height = int.Parse(_height);
        this.Magnify = byte.Parse(_Magnify);
        this.ViewFont = new Font("宋体", 10);
        Code39();
        //输出img
        System.Drawing.Image _CodeImage = this.GetCodeImage(_codeText, Code39Model.Code39Normal, true);
        System.IO.MemoryStream _Stream = new System.IO.MemoryStream();
        context.Response.ContentType = "image/jpeg";
        _CodeImage.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

    }


    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
    private Hashtable m_Code39 = new Hashtable();

    private byte m_Magnify = 0;
    /// <summary>
    /// 放大倍数
    /// </summary>
    public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } }

    private int m_Height = 40;
    /// <summary>
    /// 图形高
    /// </summary>
    public int Height { get { return m_Height; } set { m_Height = value; } }

    private Font m_ViewFont = null;
    /// <summary>
    /// 字体大小
    /// </summary>
    public Font ViewFont { get { return m_ViewFont; } set { m_ViewFont = value; } }



    public void Code39()
    {

        m_Code39.Add("A", "1101010010110");
        m_Code39.Add("B", "1011010010110");
        m_Code39.Add("C", "1101101001010");
        m_Code39.Add("D", "1010110010110");
        m_Code39.Add("E", "1101011001010");
        m_Code39.Add("F", "1011011001010");
        m_Code39.Add("G", "1010100110110");
        m_Code39.Add("H", "1101010011010");
        m_Code39.Add("I", "1011010011010");
        m_Code39.Add("J", "1010110011010");
        m_Code39.Add("K", "1101010100110");
        m_Code39.Add("L", "1011010100110");
        m_Code39.Add("M", "1101101010010");
        m_Code39.Add("N", "1010110100110");
        m_Code39.Add("O", "1101011010010");
        m_Code39.Add("P", "1011011010010");
        m_Code39.Add("Q", "1010101100110");
        m_Code39.Add("R", "1101010110010");
        m_Code39.Add("S", "1011010110010");
        m_Code39.Add("T", "1010110110010");
        m_Code39.Add("U", "1100101010110");
        m_Code39.Add("V", "1001101010110");
        m_Code39.Add("W", "1100110101010");
        m_Code39.Add("X", "1001011010110");
        m_Code39.Add("Y", "1100101101010");
        m_Code39.Add("Z", "1001101101010");
        m_Code39.Add("0", "1010011011010");
        m_Code39.Add("1", "1101001010110");
        m_Code39.Add("2", "1011001010110");
        m_Code39.Add("3", "1101100101010");
        m_Code39.Add("4", "1010011010110");
        m_Code39.Add("5", "1101001101010");
        m_Code39.Add("6", "1011001101010");
        m_Code39.Add("7", "1010010110110");
        m_Code39.Add("8", "1101001011010");
        m_Code39.Add("9", "1011001011010");
        m_Code39.Add("+", "1001010010010");
        m_Code39.Add("-", "1001010110110");
        m_Code39.Add("*", "1001011011010");
        m_Code39.Add("/", "1001001010010");
        m_Code39.Add("%", "1010010010010");
        //m_Code39.Add("contentquot", "1001001001010");
        m_Code39.Add(".", "1100101011010");
        m_Code39.Add(" ", "1001101011010");

    }


    public enum Code39Model
    {
        /// <summary>
        /// 基本类别 1234567890ABC
        /// </summary>
        Code39Normal,
        /// <summary>
        /// 全ASCII方式 +A+B 来表示小写
        /// </summary>
        Code39FullAscII
    }
    /// <summary>
    /// 获得条码图形
    /// </summary>
    /// <param name="p_Text">文字信息</param>
    /// <param name="p_Model">类别</param>
    /// <param name="p_StarChar">是否增加前后*号</param>
    /// <returns>图形</returns>
    public Bitmap GetCodeImage(string p_Text, Code39Model p_Model, bool p_StarChar)
    {
        string _ValueText = "";
        string _CodeText = "";
        char[] _ValueChar = null;
        switch (p_Model)
        {
            case Code39Model.Code39Normal:
                _ValueText = p_Text.ToUpper();
                break;
            default:
                _ValueChar = p_Text.ToCharArray();
                for (int i = 0; i != _ValueChar.Length; i++)
                {
                    if ((int)_ValueChar[i] >= 97 && (int)_ValueChar[i] <= 122)
                    {
                        _ValueText += "+" + _ValueChar[i].ToString().ToUpper();

                    }
                    else
                    {
                        _ValueText += _ValueChar[i].ToString();
                    }
                }
                break;
        }


        _ValueChar = _ValueText.ToCharArray();

        if (p_StarChar == true) _CodeText += m_Code39["*"];

        for (int i = 0; i != _ValueChar.Length; i++)
        {
            if (p_StarChar == true && _ValueChar[i] == '*') throw new Exception("带有起始符号不能出现*");

            object _CharCode = m_Code39[_ValueChar[i].ToString()];
            if (_CharCode == null) throw new Exception("不可用的字符" + _ValueChar[i].ToString());
            _CodeText += _CharCode.ToString();
        }


        if (p_StarChar == true) _CodeText += m_Code39["*"];


        Bitmap _CodeBmp = GetImage(_CodeText);
        GetViewImage(_CodeBmp, p_Text);
        return _CodeBmp;
    }



    /// <summary>
    /// 绘制编码图形
    /// </summary>
    /// <param name="p_Text">编码</param>
    /// <returns>图形</returns>
    private Bitmap GetImage(string p_Text)
    {
        char[] _Value = p_Text.ToCharArray();


        //宽 == 需要绘制的数量*放大倍数 + 两个字的宽   
        Bitmap _CodeImage = new Bitmap(_Value.Length * ((int)m_Magnify + 1), (int)m_Height);
        Graphics _Garphics = Graphics.FromImage(_CodeImage);

        _Garphics.FillRectangle(Brushes.White, new Rectangle(0, 0, _CodeImage.Width, _CodeImage.Height));

        int _LenEx = 0;
        for (int i = 0; i != _Value.Length; i++)
        {
            int _DrawWidth = m_Magnify + 1;
            if (_Value[i] == '1')
            {
                _Garphics.FillRectangle(Brushes.Black, new Rectangle(_LenEx, 0, _DrawWidth, m_Height));

            }
            else
            {
                _Garphics.FillRectangle(Brushes.White, new Rectangle(_LenEx, 0, _DrawWidth, m_Height));
            }
            _LenEx += _DrawWidth;
        }



        _Garphics.Dispose();
        return _CodeImage;
    }
    /// <summary>
    /// 绘制文字
    /// </summary>
    /// <param name="p_CodeImage">图形</param>
    /// <param name="p_Text">文字</param>
    private void GetViewImage(Bitmap p_CodeImage, string p_Text)
    {
        if (m_ViewFont == null) return;
        Graphics _Graphics = Graphics.FromImage(p_CodeImage);
        SizeF _FontSize = _Graphics.MeasureString(p_Text, m_ViewFont);

        if (_FontSize.Width > p_CodeImage.Width || _FontSize.Height > p_CodeImage.Height - 20)
        {
            _Graphics.Dispose();
            return;
        }
        int _StarHeight = p_CodeImage.Height - (int)_FontSize.Height;

        _Graphics.FillRectangle(Brushes.White, new Rectangle(0, _StarHeight, p_CodeImage.Width, (int)_FontSize.Height));

        int _StarWidth = (p_CodeImage.Width - (int)_FontSize.Width) / 2;

        _Graphics.DrawString(p_Text, m_ViewFont, Brushes.Black, _StarWidth, _StarHeight);

        _Graphics.Dispose();

    }


}

调用时候和验证码调用类似,用一个图片控件接收,后台代码

imgCode.ImageUrl = "getCode.ashx?m=0&h=60&vCode=" + encode;

三:生成二维码

用到一个类库ThoughtWorks.QRCode.dll

网上下载一个引用进去就可以了

using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;


1,普通不带图片的二维码

一般处理程序代码

<%@ WebHandler Language="C#" Class="getQRCode1" %>

using System;
using System.Web;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;
using System.IO;
using System.Text;
using System.Drawing;

public class getQRCode1 : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        String data = context.Request["CodeText"];
        String size = context.Request["s"];
        if (!string.IsNullOrEmpty(data))
        {
            size = !string.IsNullOrEmpty(data) ? size : "4";
            System.Drawing.Image image = GetCodeImage(data, int.Parse(size));
            System.IO.MemoryStream MStream = new System.IO.MemoryStream();
            image.Save(MStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            context.Response.ClearContent();
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite(MStream.ToArray());

            MStream.Dispose();
        }

        context.Response.Flush();
        context.Response.End();
    }

    public Image GetCodeImage(string code, int size)
    {
        //创建二维码生成类  
        QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
        //设置编码模式  
        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
        //设置编码测量度  
        qrCodeEncoder.QRCodeScale = (size>0&&size<40)?size:4;
        //设置编码版本  
        qrCodeEncoder.QRCodeVersion = 8;
        //设置编码错误纠正  
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
        //生成二维码图片  
        System.Drawing.Image image = qrCodeEncoder.Encode(code, Encoding.UTF8);
        return image; 
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

页面调用

前台

</div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1"
            runat="server" Text="Button" οnclick="Button1_Click" />
    </div>
    <div>
    <asp:Image ID="imgCheck" runat="server" /><br />
    </div>

后台

protected void Button1_Click(object sender, EventArgs e)
    {
        imgCheck.ImageUrl = "getQRCode1.ashx?s=4&CodeText=" + TextBox1.Text.Trim();
    }

2,带图片的二维码

一般处理程序

<%@ WebHandler Language="C#" Class="getQRCode" %>

using System;  
using System.Web;  
  
using ThoughtWorks.QRCode.Codec;  
using ThoughtWorks.QRCode.Codec.Data;  
using ThoughtWorks.QRCode.Codec.Util;  
using System.IO;  
using System.Text;  
using System.Drawing;  
using System.Drawing.Drawing2D;  

public class getQRCode : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {

        String data = context.Request["CodeText"];
        if (!string.IsNullOrEmpty(data))
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeScale = 4;
            qrCodeEncoder.QRCodeVersion = 8;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            //data = Server.UrlEncode(data);
            System.Drawing.Image image = qrCodeEncoder.Encode(data, Encoding.UTF8);
            System.IO.MemoryStream MStream = new System.IO.MemoryStream();
            image.Save(MStream, System.Drawing.Imaging.ImageFormat.Png);

            System.IO.MemoryStream MStream1 = new System.IO.MemoryStream();
            CombinImage(image, context.Server.MapPath("../images/logo.jpg")).Save(MStream1, System.Drawing.Imaging.ImageFormat.Png);
            context.Response.ClearContent();
            context.Response.ContentType = "image/png";
            context.Response.BinaryWrite(MStream1.ToArray());

            //image.Dispose();  
            MStream.Dispose();
            MStream1.Dispose();
        }

        context.Response.Flush();
        context.Response.End();
    }

    /// <summary>    
    /// 调用此函数后使此两种图片合并,类似相册,有个    
    /// 背景图,中间贴自己的目标图片    
    /// </summary>    
    /// <param name="imgBack">粘贴的源图片</param>    
    /// <param name="destImg">粘贴的目标图片</param>    
    public static Image CombinImage(Image imgBack, string destImg)
    {
        Image img = Image.FromFile(destImg);        //照片图片      
        if (img.Height != 65 || img.Width != 65)
        {
            img = KiResizeImage(img, 65, 65, 0);
        }
        Graphics g = Graphics.FromImage(imgBack);

        g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);      //g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);     

        //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一层黑色边框    

        //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);    

        g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2, img.Width, img.Height);
        GC.Collect();
        return imgBack;
    }


    /// <summary>    
    /// Resize图片    
    /// </summary>    
    /// <param name="bmp">原始Bitmap</param>    
    /// <param name="newW">新的宽度</param>    
    /// <param name="newH">新的高度</param>    
    /// <param name="Mode">保留着,暂时未用</param>    
    /// <returns>处理以后的图片</returns>    
    public static Image KiResizeImage(Image bmp, int newW, int newH, int Mode)
    {
        try
        {
            Image b = new Bitmap(newW, newH);
            Graphics g = Graphics.FromImage(b);
            // 插值算法的质量    
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
            g.Dispose();
            return b;
        }
        catch
        {
            return null;
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}  

页面调用

前台

</div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1"
            runat="server" Text="Button" οnclick="Button1_Click" />
    </div>
    <div>
    <asp:Image ID="imgCheck" runat="server" /><br />
    </div>

后台

protected void Button1_Click(object sender, EventArgs e)
    {
        imgCheck.ImageUrl = "getQRCode.ashx?CodeText=" + TextBox1.Text.Trim();
    }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET MVC 一般处理程序(General Handler),也称为 ashx 文件,是一种在 ASP.NET MVC 中用于处理特定请求的一种方式。 ASP.NET MVC 一般处理程序继承自 IHttpHandler 接口,它主要用于处理静态文件或非标准的请求。与控制器不同,一般处理程序不需要路由或视图,它直接接受请求并返回处理结果。 一般处理程序在项目中以 .ashx 的文件形式存在,可以在其中实现一些自定义的处理逻辑。可以通过在 Global.asax 文件中注册路由来映射一般处理程序的请求。 与控制器相比,一般处理程序更轻量级,更适合处理一些简单的请求,如文件下载、图片验证码生成等。它使用起来更加灵活,并且性能也更好。 使用一般处理程序的步骤如下: 1. 在项目中创建一个 .ashx 文件。 2. 实现一般处理程序的逻辑,可以通过实现 ProcessRequest 方法来处理请求,同时还可以通过实现 IRequiresSessionState 接口来访问会话状态。 3. 在 Global.asax 文件中注册一般处理程序的路由,指定请求的 URL 模式和对应的一般处理程序类名。 4. 在浏览器中访问对应的 URL,即可触发一般处理程序的逻辑,并返回处理结果。 总之,ASP.NET MVC 一般处理程序是一种用于处理特定请求的方式,它比控制器更轻量级、更灵活,适合处理一些简单的请求。我们可以通过创建一般处理程序文件,实现自定义逻辑,并在 Global.asax 文件中注册路由来使用一般处理程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值