zoukankan      html  css  js  c++  java
  • httpHandlers和httpModules接口介绍 (4)

    Web.Config配置文件

    <httpHandlers>
    <add verb="*" path="*" type
    ="ClassLibrary831.TestHandler,ClassLibrary831"></add>
    </httpHandlers>

    Verb属性:指定了处理程序支持的HTTP动作。*-支持所有的HTTP动作;“GET”-支持Get操作;“POST”-支持Post操作;“GET, POST”-支持两种操作。

    Path属性:指定了需要调用处理程序的路径和文件名(可以包含通配符)。“*”、“*.aspx”、“showImage.aspx”、“test1.aspx,test2.aspx”

    Type属性:用名字空间、类名称和程序集名称的组合形式指定处理程序或处理程序工厂的实际类型。ASP.NET运行时首先搜索bin目录中的DLL,接着在GAC中搜索。

    这样程序运行的效果是该网站的任何一个页面都会显示worm.jpg图片。如何只让一个页面(default21.aspx)执行HttpHandler中的ProcessRequest方法呢?最简单的办法是在Web.Config文件中把path配置信息设为default21.aspx。

    根据这个例子大家可以考虑一下如何编写“验证码”了。

    IHttpHandler工厂
    IHttpHandlerFactory的作用是对IHttpHandler进行管理。
    工厂的作用请见
    
    http://hi.baidu.com/grayworm/blog/item/4a832160f8c9de46eaf8f8c1.html"
    IHttpHandlerFactory接口的声明:
    public interface IHttpHandlerFactory
    {
    IHttpHandler GetHandler 
    (HttpContext context,string requestType,string url,string pathTranslated);
    void ReleaseHandler (IHttpHandler handler);
    }

    GetHandler返回实现IHttpHandler接口的类的实例,ReleaseHandler使工厂可以重用现有的处理程序实例。

    示例:两个用IHttpHandlerFactory来实现对不同HttpHandler的调用。

    有两个HttpHandler:将图片显示在页面上的HttpHandler和生成验证码的Handler

    //将图片显示在页面上的Handler

    class TestHandler : IHttpHandler
    {
    public void ProcessRequest(HttpContext context)
    {
    FileStream fs = new FileStream
    (context.Server.MapPath("worm.jpg"), FileMode.Open);
    byte[] b = new byte[fs.Length];
    fs.Read(b, 0, (int)fs.Length);
    fs.Close();
    context.Response.OutputStream.Write(b, 0, b.Length);
    }
    public bool IsReusable
    {
    get
    {
    return true;
    }
    }
    }
    //生成验证码的Handler 
    class CodeHandler:IHttpHandler
    {
    public bool IsReusable
    {
    get
    {
    return true;
    }
    }
    public void ProcessRequest(HttpContext context)
    {
    Image b = new Bitmap(50,20);
    Graphics g = Graphics.FromImage(b);
    SolidBrush sb = new SolidBrush(Color.White);
    Font f = new Font("宋体", 12);
    string str = "";
    Random r = new Random();
    for (int i = 0; i < 4; i++)
    {
    str += r.Next(10);
    }
    g.DrawString(str,f,sb,0,0);
    b.Save(context.Response.OutputStream, 
    System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    }
  • 相关阅读:
    mysql主从延迟判断,监控和问题处理
    oracle备份
    oracle的查询命令
    Appcan 自定义数字加减控件
    PowerDesigner16.5 有用地址
    git远程仓库关联(码云)
    leetcode27.移除元素(双指针法)
    leetcode26.删除排序数组中的重复项(双指针法,顺序表删除)
    leetcode21.合并两个有序链表(链表使用,递归算法)
    leetcode20.有效的括号(hashmap使用,键值匹配)
  • 原文地址:https://www.cnblogs.com/sntetwt/p/1980393.html
Copyright © 2011-2022 走看看