ASP.NET ASHX 一般处理程序教程

         你不想创建一个普通ASP.NET的Web窗体页。而又要通过一个查询字符串返回一个动态的图片、XML或者非HTML网页。这是一个用C#编程语言编写的使用ASHX(一般处理程序)的简单教程。


简介

           首先,我们来回顾一下使用ASHX文件的目的。也许我们想在URL中使用这个ASHX文件动态的返回数据内容。我们使用的URL查询字符串如下:http://www.dotnetperls.com/?file=name.

入门:怎么添加一个ASHX文件呢?
           打开你的ASP.NET网站,在网站上点击"添加新项"的菜单,此时打开了"添加新项"窗口,选择一般处理程序(Generic Handler),这时你将看到一个有一些代码的Handler.ashx文件。

自动生成的代码
         我们注意到在ASHX文件中自动生成的代码,定义了IHttpHandler接口的2个方法。最重要的方法是ProcessRequest(),无论是请求还是输出,这个方法都会被调用到。你不应该修改任何默认继承的接口成员。

URL映射
        通常,使用一个新的URL替代旧的URL或者路径是可行的。为了向后兼容和搜索引擎优化,在你的网站上,你也许想用新的处理程序代替一个旧的URL地址。用URL映射可以解决此问题。当然,你也可以用更复杂的路径重写方法。

Web.config中的部分代码

<system.web>

<urlMappings enabled="true">

<add url="~/Default.aspx" mappedUrl="~/Handler.ashx"/>

</urlMappings>

……

</system.web>

        以上代码将自动将一个连接转到另一个上面。当Default.aspx页面被请求时,Handler.ashx文件将取而代之。这意味着:你的目录默认页面将自动导航到一般处理程序上。

添加示例图片
        在这里,你也许会用ASHX文件处理图片文件。在桌面或者网络上找一会你最喜欢的图片,把它添加到你的项目中。例如,我选择的图片是"Flower1.png",下面我将在ASHX文件中使用这个图片。

修改Handler.ASHX文件
       你的Handler有2个方法,我们必须修改ProcessRequest()方法,可以修改文件的ContentType和输出内容。通过下面类似的代码可以修改你的图片文件名和ContentType属性。

public void ProcessRequest(HttpContext context)

{

   context.Response.ContentType = "image/png";

   context.Response.WriteFile("~/images/ Flower1.png");

}
public bool IsReusable

{

    get

{

    return false;

}

}

测试处理程序
        在本地测试ASHX文件。点击网站绿色的运行按钮。你将在浏览器上看到你的图片文件。这是处理程序中输出的图片返回结果。


添加功能
         到目前位置,上面的例子是没有任何作用的。主要就是让我们通过ASHX处理一个图片文件。你可以在ASHX文件添加任何逻辑代码或者逻辑引用。开发者通常需要使用请求的查询字符串集合。你可以像在ASPX文件中使用的方法一样请求查询字符串:Request.QueryString["file"]。

http://image76.360doc.com/DownloadImg/2014/07/1616/43468572_4.jpg

         上面的代码通过基于查询字符串集合,收到请求然后返回不同的图片文件。他将通过查询字符串返回二个图片中的一个。
例如:

URL = http://www.dotnetperls.com/?file=logo

File query string: logo

File written: Logo1.png

URL = http://www.dotnetperls.com/?file=flower

File query string: flower

File written: Flower1.png

测试查询字符串
          做了这么多准备工作。开始测试吧!打开你的浏览器,在URL路径上添加上面的查询字符串。你会看到ASP.NET由Default.aspx页面导航到Handler.ashx页面。并且,他将通过获取查询变量返回适当的文件。

用途
          这些代码可以用作访问者数量的计数器或者日志推荐的数量计数器。由于浏览器和Bot的区别,这将比服务器日志提供更准确的访问数量。

性能
           你也许想知道,使用ASHX文件,是否会带来一些性能的优势或改变呢?ASHX文件并不复杂,而且不涉及更多事件的调用。正如你想象的那样,一个请求处理10几个事件比处理一个事件将消耗更多的性能。所以,在可能的情况下使用ASHX文件吧,他将会带来一些性能的优势。

选择处理程序
           那什么时候用客户端处理程序,什么时候使用Web窗体文件呢?一般处理程序在处理二进制数据更有优势,而Web窗体在做快速开发方面更好。

控制树
          在ASP.NET框架中,Web窗体使用一种称为控制树的概念(网页都保存在一个对象模型中)。当你不需要客户端的控制树或者整个网站架构的时候,使用一般处理程序,这将会带来更好的性能优势和简单的代码调试。

IsReusable 属性
          我不知道IsReusable属性在ASP.NET中的作用。通过阅读表名,他能在不破坏反复程序处理的情况下提高性能、减少内存压力。

总结
         在这篇文章中,教给你怎么在自己的网站中使用ASHX自定义处理程序。通过修改后,能填充到更多重要的网站中。结合自定义查询字符串的URL映射,可以大大简化和优化你的网站后台代码。


做好一个.aspx页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
</head>  
<body>  
    <form id="form1" runat="server">  
    <div>  
        <div>  
            <img id="img" src="images/1.jpg" height="300px" />  
        </div>  
        <a href="#" onclick="GetImg(1)">1</a>   
        <a href="#" onclick="GetImg(2)">2</a>   
        <a href="#" onclick="GetImg(3)">3</a>  
    </div>  
    </form>  
</body>  
</html>  
  
<script type="text/javascript">  
    function GetImg(index) {  
        var myImg = document.getElementById('img');  
        myImg.src = './imageHandle.ashx?id=' + index;  
    }  
</script> 

这个例子是这样的,有三个链接,分别为1、2、3,点击后显示对应的图片。

http://image76.360doc.com/DownloadImg/2014/07/1616/43468572_5.gif

posted on 2016-09-08 22:33  菜鸟Z  阅读(568)  评论(0编辑  收藏  举报

导航