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);
    }
    }
  • 相关阅读:
    Python的单向链表实现
    Leetcode 26.删除排序数组中的重复项 By Python
    Hdoj 1064 Financial Management
    【mui】
    jquery 五星评价(图片实现)
    jquery 实现点评标签 类似淘宝大众点评的 快速准时 货品完好等
    cmd命令安装、卸载、启动和停止Windows Service
    Jquery 上一步、下一步及提交
    Ajax 调用案例及错误捕捉
    【三】php 数组
  • 原文地址:https://www.cnblogs.com/sntetwt/p/1980393.html
Copyright © 2011-2022 走看看