日期:2014-05-17  浏览次数:20948 次

ASP.NET运行机制之一般处理程序(ashx)

一. 概述

?

?? 新建一个ashx文件? 代码如下

<%@ WebHandler Language="C#" Class="TestHandler" %>

using System;
using System.Web;

public class TestHandler : IHttpHandler {
    //dd
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");
    }
    //dd
    public bool IsReusable {
        get {
            return false;
        }
    }

}

?

二. 解析

?

?? 1).

<%@ WebHandler Language="C#" Class="TestHandler" %>

?

???? @WebHandler为ASP.NET页面的一个指令 指定为Http handler文件(.ashx)定义属性(Attribute)编译选项

?????? 属性
??????????? Class 指定一个继承自IHttpHandler的类,当handler被请求时将被实例化用来响应请求。这个属性是必须的
??????????? CodeBehind 指定Class对应的文件,基本上没用,主要是用来支持VS显示的,可以去掉。
?
????? 编译选项
?????????? Debug 默认是false,所以非调试就不用打开,影响性能,可以省略
?????????? Description 关于当前handler的描述,ASP.NET解析时忽略,可能调试时能提供辅助信息,可以省略
?????????? Language 默认C# ,可以省略
?????????? WarningLevel 0-4 有默认值,可以省略。

?? 2).

?

??????? 接下来是底下建立的类

??????????????????? 实现了一个关键的接口:System.Web.IHttpHandler。实现它表明将以何种方式来处理来自外部的请求。

???????????????????????????? 参数context是System.Web.HttpContext类型

???????????????????????????? context对象提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、

???????????????????????????????????????? Session 和 Server)的引用,也即可以访问我们的几大服务器对象。

????????????????????????????? 可以在ProcessRequest方法中编写如何处理请求的细节

<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System;
using System.Web;

/// <summary>
/// 这就一个没有任何实现的一般处理程序。
/// </summary>
public class ImageHandler : IHttpHandler 
{
    
    public void ProcessRequest (HttpContext context)
    {
        //获取虚拟目录的物理路径。 
        string path = context.Server.MapPath("");
        //获取图片文件的二进制数据。