• [转]使用web.config中的httpHandlers


    本文转自:http://www.youguanbumen.net/84.html

    昨天写了个文章尽量用自己的话讲述了URLRewriter.dll组件的基本使用,组件本身使用起来比较方便,通过简单的配置边可以进行URL重写并且实现用于装逼或者加强SEO的伪静态。但是为了了解配置文件各个节点的作用还是小费了一番功夫的,归根结底还是基础不扎实惹的祸。这篇文章尽量用自己的语言简单讲述一下httpHandlers节点的使用^_^

        回看前一篇文章我们的第2个步骤讲述web.config配置的最后一小步,我们做了如下配置:
    web.config配置
    1
    2
    3
    4
    5
    6
    7
    <configuration>
      <system.web>
        <httpHandlers>
          <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
        </httpHandlers>
      </system.web>
    </configuration>
        看看上面的配置,add节点表达的意思大致就是:“对于通过任何方式向任何扩展名为.html的请求,交由URLRewriter这个程序集中的URLRewriter.RewriterFactoryHandler类来处理”。很明显这个类是URLRewriter.dll组件写好给我们的。我们自己如何来实现这样的类呢?下面以一个很简单的DEMO来说明:

        首先提一个需求:“对于通过GET方式向任何扩展名为.tiu的请求,使用一个名为TiuHttpHandler的类来进行处理,请求后返回‘Hello Tiu’的字样”。基于这个需求我们需要在web.config的httpHandlers中添加一个add节点,如下:
    从最外层到add节点的配置,主要看add节点的配置
    1
    2
    3
    4
    5
    6
    7
    <configuration>
      <system.web>
        <httpHandlers>
          <add verb="GET" path="*.tiu" type="WebApplication.TiuHttpHandler,WebApplication" />
        </httpHandlers>
      </system.web>
    </configuration>
        PS:注意,这里要type属性中的“WebApplication.TiuHttpHandler”是要实现的类的全名,前面的是命名空间,和我建的项目名一致;逗号隔开后面的“WebApplication”很明显就是程序集名了,这里也和项目名一致(一般都是这样的···)

        接下来就是实现类了,用来处理Http请求,必须要继承IHttpHandler这个接口(是不是觉得在哪里见过呢,创建一般处理程序看看就知道了)。创建TiuHttpHandler类,代码很简单,如下:
    TiuHttpHandler类代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    namespace WebApplication
    {
        public class TiuHttpHandler:IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                var currentResponse = context.Response;
                var outPutStr = string.Format("Hello Tiu");
                currentResponse.Write(outPutStr);
            }
            public bool IsReusable
            {
                get { return false; }
            }
        }
    }
        PS:继承了IHttpHandler接口后有一个方法和属性要实现,ProcessRequest(HttpContext context)方法是处理请求的入口方法;IsReusable属性返回一个bool值,来表示这http handle的实例是否能被重用来处理多个同类型的http请求,这里设置为false,如果是用来处理图片的请求一般就为true了(防盗链的时候一般都这样用...)

        完成以上的代码我们可以开始测试了,在网站根目录下面添加个Default.aspx页面,拖几个HyperLink控件上去,页面的关键代码如下:
    Default.aspx页面代码
    1
    2
    3
    4
    5
    6
    7
    8
    <div>
        <ul>
            <li><asp:HyperLink ID="HyperLink4" NavigateUrl="serafin.tiu" runat="server" Text="serafin.tiu" /></li>
            <li><asp:HyperLink ID="HyperLink1" NavigateUrl="~/serafin.tiu" runat="server" Text="~/serafin.tiu" /></li>
            <li><asp:HyperLink ID="HyperLink2" NavigateUrl="~/channel1/serafin.tiu" runat="server" Text="~/channel1/serafin.tiu" /></li>
            <li><asp:HyperLink ID="HyperLink3" NavigateUrl="~/channel2/serafin.tiu" runat="server" Text="~/channel2/serafin.tiu" /></li>
        </ul>
    </div>

        打开Default.aspx页面看到四个超链接,分别点击会发现都看新打开的浏览器窗口显示了“Hello Tiu”的字样,说明被我们创建的TiuHttpHandler类给处理了。当然实际使用的时候我们往往会在ProcessRequest(HttpContext context)方法中书写或者简单或者复杂的逻辑代码来进行不同的处理,例如对URL进行分析然后调用不同的业务方法显示不同结果之类的

        注意!部署到iis上面的话记得要做写配置,道理和前一篇文章一样,详见这篇文章后面的图片!
        本文的源代码,需要的话下载看下^_^

        一般什么情况下会这样做呢,由于经验比较少所以我也说不全...网站图片防盗链的情况下、对于不需要显示html仅仅用于处理请求的情况下之类,但多数情况下使用一般处理程序已经可以解决问题了,文件没讲得深入主要是我自己也用的比较少,旨在了解web.config的httpHandlers到底是个啥,一般怎么用^_^,详细资料可以查看MSND(看官方资料才是王道)


     

  • 相关阅读:
    跟着我学习-python-01-流程控制语句
    跟着我学习-python-01-用户交互
    跟着我学习-python-02-while循环
    基于Centos7.6上Ambari2.7.4+HDP3.1.4离线安装
    TDH(Transwarp Data Hub)社区版安装教程
    跟我学习日常写的shell脚本-设置系统selinux
    [Linux]常用命令“ll”失效或命令未找到
    NPOI
    Linq&lamda相关
    接口相关
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2208179.html
Copyright © 2020-2023  润新知