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"]。
上面的代码通过基于查询字符串集合,收到请求然后返回不同的图片文件。他将通过查询字符串返回二个图片中的一个。
例如:
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 一般处理程序教程的更多相关文章
- asp.net ashx 一般处理程序 使用async await异步直接 copy可用哦
以前一直很懒 碰到ashx要用await异步就绕开 用aspx 或者mvc异步控制器 这次公司需要 我查了国内的文章基本都不能简单copy来处理一堆错关键的过程中函数BeginProcess ...
- asp.net ashx一般处理程序实现async await异步操作
目前项目存在页面展示大量图片,效率不高,考虑优化性能,改为ashx+异步下载的方式,废话不说直接贴code: using System; using System.Web; using System. ...
- ashx一般处理程序文件用处
今天逛博客园,无意发现一篇好文章,关于ashx文件的使用. 文章一:向服务器发送josn字符串,服务器端解析 本文转载:http://www.cnblogs.com/yzenet/p/3470388. ...
- Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较
Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f " ...
- ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)
前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...
- ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...
- ASP.NET Aries 入门开发教程4:查询区的下拉配置
背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...
- 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 入门教 ...
- ASP.NET Identity 3.0教程
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:我相信有些人和我一样,已经开始把ASP.NET 5用于产品开发了.不过现在最大的问题是 ...
随机推荐
- 浅copy
person=['aaa',['a',bbb'] p1=copy.copy(person) p2=person[:] p3=list(person) p4=person.copy() print(ty ...
- 2020/1/29 PHP代码审计之进一步学习XSS【持续更新】
0x00 上午学习了XSS漏洞,中午吃饭想了想,还是思考的太浅层了,这种老生常谈的东西对于现在的我意义不大.现在我需要的是思考.于是就有了这个随笔.在本文中,我会持续更新一些XSS的深入思考,payl ...
- Docker MongoDB 集群搭建
简单地在Docker环境上搭建一个无认证的MongoDB集群.1.本文使用的容器集群角色 ContainerName IP:portConfig Server cfg_1 10.1.1.2:27 ...
- python format输出
http://www.cnblogs.com/nulige/p/6115793.html 2.Format 方式 [[fill]align][sign][#][0][width][,][.precis ...
- Django2.0模型基础——(一)
Django模型封装python操作数据库的代码,让我们可以更加方便的执行SQL语句.每个创建的app下都会有一个叫models.py的文件,在这个文件下创建的模型类映射于数据库的表名,类属性映射于数 ...
- 总结一些常用的训练 GANs 的方法
众所周知,GANs 的训练尤其困难,笔者自从跳入了 GANs 这个领域(坑),就一直在跟如何训练 GANs 做「对抗训练」,受启发于 ganhacks,并结合自己的经验记录总结了一些常用的训练 GAN ...
- 记录一次URL中有特殊字符怎么处理?
你out了,赶紧换 RestTemplate 吧! 进入正题,直接实战!!! import java.util.HashMap; import java.util.Map; import org.ju ...
- python爬虫--cookie反爬处理
Cookies的处理 作用 保存客户端的相关状态 在爬虫中如果遇到了cookie的反爬如何处理? 手动处理 在抓包工具中捕获cookie,将其封装在headers中 应用场景:cookie没有有效时长 ...
- pyQt 流布局的一个例子
瀑布流布局 from PyQt5.QtCore import QPoint, QRect, QSize, Qt from PyQt5.QtWidgets import (QApplication, Q ...
- 快速dns推荐
中国互联网络中心:1.2.4.8.210.2.4.8.101.226.4.6(电信及移动).123.125.81.6(联通) 阿里DNS:223.5.5.5.223.6.6.6 googleDNS:8 ...