zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    P4345 [SHOI2015]超能粒子炮·改 Lucas
    P2480 [SDOI2010]古代猪文 Lucas+CRT合并
    nginx优化之request_time 和upstream_response_time差别
    务器遭受攻击后的一般处理过程
    sublime text修改TAB缩进为空格
    MySQL同主机不同数据库的复制命令
    【已解决】BeautifulSoup已经获得了Unicode的Soup但是print出来却是乱码
    关于mongodb ,redis,memcache
    MySQL DBA 刚入职时如何快速拥抱新的环境
    看linux连接进程占用的实时流量iftop netatop NetHogs
  • 原文地址:https://www.cnblogs.com/archermeng/p/7537223.html
Copyright © 2011-2022 走看看