ASP.NET 中的一般处理程序

   最近在学习ajax技术时看到一般处理程序(*.ashx),不知道是什么东西,于是各种查资料,下面是本人对一般处理程序的一些总结。

       我在创建网站时发现这个一般处理程序只可以在ASP.NET MVC中和web application中添加,而在创建website中缺不存在添加项。并且在web application中还可以添加处理程序,但是实现的步骤比较复杂,所以为了方便网站开发中对于处理程序的应用,从ASP.NET 2.0 开始,ASP.NET提供了称为一般处理程序的处理程序,允许我们使用比较简单的方式定义扩展名为ashx的专用处理程序。

[csharp]   view plain copy

 

  1. public class Handler1 : IHttpHandler  
  2.     {  
  3.   
  4.         public void ProcessRequest(HttpContext context)  
  5.         {  
  6.             context.Response.ContentType = "text/plain";  
  7.             context.Response.Write("Hello World");  
  8.         }  
  9.   
  10.         public bool IsReusable  
  11.         {  
  12.             get  
  13.             {  
  14.                 return false;  
  15.             }  
  16.         }  
  17.     }  

 从上面的代码可以看到,一般处理程序实际上就是一个处理程序类,这个处理程序被ASP.NET直接在系统的配置文件中映射到了ashx扩展名的请求上。这样,我们就不需要在配置文件中进行配置了。

[html]   view plain copy
  1. <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />  

   一般处理程序工厂       通过配置文件,我们可以看到,对于扩展名为ashx的请求是通过定义在命名空间System.Web.UI下的SimpleHandlerFactory处理程序工厂来完成的。      当请求一个ashx扩展名的服务器上的资源的时候,SimpleHandlerFactory将找到对应的ashx文件,通过这个文件找到对应的处理程序,最后SimpleHandlerFactory通过反射创建一个此类型的处理程序实例对象,比通过 GetHandler方法返回给HttpApplication,完成最终的请求处理过程。
        使用一般处理程序的场合         对于ASP.NET网站来说,网站最常见的处理结果就是HTML网页,生成网页的工作通常使用扩展名为aspx的Web窗体来完成。对于处理结果不是HTML的请求,都可以通过一般处理程序完成。例如生成 RSS Feed 、 XML 、图片等。        一般处理程序是ASP.NET 网站中最为简单、高效的处理程序,在处理返回类型不是HTML的请求中有着重要的作用。
       使用一般处理程序生产JSON         在AJAX程序中,经常需要向浏览器返回JSON格式的数据结果,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生产。JSON 采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯,这些特性使JSON成为理想的数据交换语言。

[csharp]   view plain copy
  1. namespace ValidateCode  
  2. {  
  3.     public class Handler1 : IHttpHandler  
  4.     {  
  5.   
  6.         public void ProcessRequest(HttpContext context)  
  7.         {  
  8.             Random r = new Random();  
  9.             int a = r.Next(100, 10000);  
  10.             string json = string.Format("{{\"Number\":{0}}}",a);  
  11.   
  12.             context.Response.Cache.SetCacheability(HttpCacheability.NoCache);  
  13.             context.Response.ContentType = "application/json";  
  14.             context.Response.Write(json);  
  15.         }  
  16.   
  17.         public bool IsReusable  
  18.         {  
  19.             get  
  20.             {  
  21.                 return false;  
  22.             }  
  23.         }  
  24.     }  
  25. }  
[javascript]   view plain copy
  1. <div id="num">  
  2.   
  3. </div>  
  4.   
  5.   
  6.    <script type="text/javascript">  
  7.        var elemnumdiv = document.getElementById('num');  
  8.        function GetNumber() {  
  9.            var xhr;  
  10.            if (window.ActiveXObjet)  
  11.                xhr = new ActiveXObject("Microsoft.XMLHTTP");  
  12.            else  
  13.                xhr = new XMLHttpRequest();  
  14.            xhr.open("get""Handler1.ashx"false);  
  15.            xhr.send(null);  
  16.            if (xhr.readyState == 4) {  
  17.                if (xhr.status == 200)  
  18.                    var result = eval("(" + xhr.responseText + ")");  
  19.                elemnumdiv.innerHTML = result.Number;  
  20.            }  
  21.        }  
  22.        setInterval(GetNumber, 1000);  
  23. </script>  

         在ASP.NET 3.5之后,定义在命名空间System.Runtime.Serialization.Json中 DataContractJsonSerializer 可以帮助我们直接将一个对象格式化JSON,或者将一个JSON反序列化为一个 .NET中的对象实例。这样,实现起来可以更加简单。

[csharp]   view plain copy
    1. namespace WebApplication1  
    2. {  
    3.     public class Number  
    4.     {  
    5.         public int Number { getset; }  
    6.     }  
    7.   
    8.     public class Handler1 : IHttpHandler  
    9.     {  
    10.   
    11.         public void ProcessRequest(HttpContext context)  
    12.         {  
    13.             context.Response.Cache.SetCacheability(HttpCacheability.NoCache);  
    14.             context.Response.ContentType = "application/json";  
    15.             Random r = new Random();  
    16.             int a = r.Next(100, 10000);  
    17.             string json = string.Format("{{\"Number\":{0}}}", a);  
    18.   
    19.             System.Type type = typeof(Number);  
    20.   
    21.             System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =  
    22.                 new System.Runtime.Serialization.Json.DataContractJsonSerializer(type);  
    23.   
    24.             Number number = new Number();  
    25.             number.Number = a;  
    26.   
    27.             serializer.WriteObject(context.Response.OutputStream, number);  
    28.         }  
    29.   
    30.         public bool IsReusable  
    31.         {  
    32.             get  
    33.             {  
    34.                 return false;  
    35.             }  
    36.         }  
    37.     }  
    38. }  

 

转载于:https://www.cnblogs.com/pcfengzi/archive/2012/05/13/2498543.html

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、付费专栏及课程。

余额充值