• Ajax改良形式——XMLHTTP + HttpHandler


      该模式改善XMLHTTP + WebForm存在的问题,其使用HttpHandler处理请求(Request)的消息和发送响应(Response)。

      HttpHandler是Http的处理核心之一,它实现了ISAPI Extention的功能。HttpHandler的功能是通过实现IHttpHandler接口来实现的。一个简单的Http请求处理过程如下图:

      

      Web请求首先到达IIS,通过aspnet_isapi.dll把请求传递给ASP.NET引擎;在ASP.NET引擎中对Web请求经过多个HTTP Module的处理,最后到达HTTP Handler;HTTP Handler再把处理后的结果返回给IIS,IIS负责进一步把这个结果返回给发出请求的客户端。

      由上面处理过程可以看出,在ASP.NET管理处理的末端是HTTP Handler。其实每个ASP.NET的Page都实现了IHttpHandler,在Visual Studio.net中的page类对象查看器中可以证实这一点,具体的Page类代码如下:

      

       
      接口IHttpHandler包括一个方法和一个属性。ProcessRequest方法是添加自己的代码进行相应处理的地方;IsReuseable属性指明该HttpHandler的实现类是否需要缓存。具体定义代码如下所示:
      //IHttpHandler接口
      interface IHttpHandler
      {
        void ProcessRequest(HttpContext ctx);
        bool IsReuseable{get;}
      }
      Handler的实现
      新建一个类库工程,命名HelloAjax,然后添加一个实现IHttpHandler接口类HttpHandler:
    using System;
    using System.Web;
    using System.Text;
    namespace HelloAjax
    {
      public class HttpHandler:IHttpHandler
        {
            #region IHttpHandler 成员
            public bool IsReusable
            {
                get
                {
                    return true;
                }
            }
            public void ProcessRequest(HttpContext context)
            {
                string str = "服务器Hander得到了您输入的信息:" + context.Request["msg"] + "<br/>您的IP地址是:";
                str += context.Request.UserHostAddress;
                str += "<br/>当前服务器的时间:";
                str += DateTime.Now.ToLocalTime();
                context.Response.Write(str);
            }
            #endregion
        }
    }
    编译后得到的HelloAjax.dll就是要用到的Handler。
    改良工作
    首先,项目中添加对Handler的引用
    然后,Web.config的system.HttpHandler中配置如下节
        <httpHandlers>
             <add verb="GET,POST"
                  path="*.ashx"
                  type="HelloAjax.HttpHandler,HelloAjax"/>
             </httpHandlers>
    最后,客户端请求的URL需改为以.ashx为扩展名
  • 相关阅读:
    C# -- HttpWebRequest 和 HttpWebResponse 的使用
    C# -- Lambda 表达式的使用
    ASP.NET -- WebForm -- HttpRequest类的方法和属性
    ASP.NET -- WebForm -- HttpResponse 类的方法和属性
    C# -- 索引器、枚举类型
    C#设计模式之七桥接模式(Bridge Pattern)【结构型】
    C#设计模式之六适配器模式(Adapter Pattern)【结构型】
    C#设计模式之五原型模式(Prototype Pattern)【创建型】
    C#设计模式之四建造者模式(Builder Pattern)【创建型】
    C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】
  • 原文地址:https://www.cnblogs.com/SFAN/p/2101367.html
Copyright © 2020-2023  润新知