你不想创建一个普通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"]。

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

例如:

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="data: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,点击后显示对应的图片。

ASP.NET ASHX 一般处理程序教程的更多相关文章

  1. asp.net ashx 一般处理程序 使用async await异步直接 copy可用哦

    以前一直很懒  碰到ashx要用await异步就绕开  用aspx  或者mvc异步控制器  这次公司需要  我查了国内的文章基本都不能简单copy来处理一堆错关键的过程中函数BeginProcess ...

  2. asp.net ashx一般处理程序实现async await异步操作

    目前项目存在页面展示大量图片,效率不高,考虑优化性能,改为ashx+异步下载的方式,废话不说直接贴code: using System; using System.Web; using System. ...

  3. ashx一般处理程序文件用处

    今天逛博客园,无意发现一篇好文章,关于ashx文件的使用. 文章一:向服务器发送josn字符串,服务器端解析 本文转载:http://www.cnblogs.com/yzenet/p/3470388. ...

  4. Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较

    Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f " ...

  5. ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)

    前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...

  6. ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑

    前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...

  7. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

  8. ASP.NET MVC 5 入门教程 (4) View和ViewBag

    文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-view.html 上一节:ASP.NET MVC 5 入门教 ...

  9. ASP.NET Identity 3.0教程

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:我相信有些人和我一样,已经开始把ASP.NET 5用于产品开发了.不过现在最大的问题是 ...

随机推荐

  1. 解决Android Studio的安装问题

    今天开始了android studio的下载与安装,我再官网上下载了Android studio,下载不难,运行出来可需要一定的时间,在中途中我遇到了一些问题 一:Build错误: 在我最开始下载完A ...

  2. Unity使用TUIO协议接入雷达

    本篇文章不介绍Unity.TUIO.雷达是什么以及有什么作用.刚接触TUIO的亲们,建议直接硬刚.至于刚接触Unity的亲,这边建议亲直接放弃治疗呢 下面开始正儿八经的教程 需要准备的东西 Unity ...

  3. 《Docekr入门学习篇》——Docker镜像制作

    Docker镜像制作 Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建) 手动构建 基于centos镜像进行构建制作Nginx镜像 [root@rbtnode1 ~ ...

  4. 调用新浪短地址转换api的一个测试

    import base64 import requests url="http://www.~~~~.com" headers={ "User-Agent":& ...

  5. webpack--删除dist目录

    1.安装clean-webpack-plugin插件 npm install clean-webpack-plugin --D 2.在webpack.dev.conf.js或者webpack.conf ...

  6. java基本类型和包装类型

          int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象 Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变 ...

  7. rare alleles

    I.4 Where the rare alleles are found p是基因A的频率,N是个体数目(也就是基因型个数,所以基因个数是2n,所以全部个体的基因A的个数是2np),p方是PAA,np ...

  8. 史上最强maven配置详情

    史上最强maven配置详情 优点 对第三方依赖库进行了统一的版本管理 统一了构建过程 统一了项目的目录结构 构建 清理 : mvn clear 编译 : mvn compile 测试 : mvn te ...

  9. [Algo] 66. All Valid Permutations Of Parentheses I

    Given N pairs of parentheses “()”, return a list with all the valid permutations. Assumptions N > ...

  10. svn http

    yum install -y httpd subversion mod_dav_svn mkdir -p /var/lib/svn cd /var/lib/svn svnadmin create de ...