谈谈一般处理程序(1)---httpcontext

11 篇文章 1 订阅

          今天我们来说一下一般处理程序,一般处理程序是什么呢? 一般处理程序实际上就是一个处理程序类。那么我们为什么要用?用他有什么优势? 对于ASP.NET网站来说,网站最常见的处理结果就是HTML网页,生成网页的工作通常使用拓展名为ASPXweb窗体来完成。对于处理结果不是HTML的请求,都可以通过一般处理程序完成,例如:RSSFeedXML、图片等。一般处理程序是ASP.NET网站中最为简单、高效的处理程序,在处理返回类型不是HTML的请求中有着重要的作用。那么如何使用呢?看一下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
namespace 一般处理程序Demo
{
    /// <summary>
    /// Download 的摘要说明
    /// </summary>
    public class Download : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //添加一个文件的数据类型
            context.Response.ContentType = "application/octet-stream";
            //将文件进行编码
            string encodeFileName = HttpUtility.UrlEncode("文件.htm");//需要把文件名UrlEncode,因为有中文存在
            //添加一个报文头
            context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", encodeFileName));
            //获得文件的文件名称
            string filepath = context.Server.MapPath("Default.aspx");
            //利用文件流保存
            context.Response.Write(File.ReadAllText(filepath));
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

   

html页面代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <title>文件打开与保存</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <a  href="Default.aspx">打开文件</a>
    <a href="Download.ashx">保存文件</a>    
    </div>
    </form>
</body>
</html>

    

   大家可以看到,一般处理程序用起来很简单。那么我们看看一般处理程序中很重要的一个类:HttpContext类。

       HttpContext类:封装有关个别HTTP请求的所有HTTP特定的信息,又叫上下文。 看到这个解释,我觉得有些抽象,Http特定信息具体又是什么?看了下备注: 

为继承 IHttpModule  IHttpHandler 接口的类提供了对当前 HTTP 请求的 HttpContext 对象的引用。该对象提供对请求的内部 RequestResponse  Server 属性的访问。  

 

    1.生命周期:从用户发送请求开始到服务器处理完请求并生成内容返回到客户端为止。针对每个不同用户的请求,服务器都会创建一个新的HttpContext实例直到请求结束,服务器销毁这个实例

    2.HttpContext的作用:处理请求的属性如:requestresponseserver等。其实我们在开发asp.net页面的时候,可以直接使用request为什么要通过HttpContext类来访问呢?因为request等这些可以在aspx页面的代码中直接使用,但是在IHttpModuleIHttpHandler中就不能直接使用HttpContext类对RequestResponseServer等进行了封装,保证在整个请求周期内都可以随时随地地调用。 

    3.HttpContext其它功能:HttpContext还可以处理CacHeHttpContext.Item等,在其生命周期内可以存储一些临时数据,方便随时使用。当用户发送某个Http请求,我们可以通过HttpContext进行截获,查看里面包含了哪些请求的信息,然后可以进行一系列的操作,比如说切换到其他的页面,这个时候,可以重组请求的数据满足新页面的要求。即:即使不在page页面中,也可以通过HttpContextCurrent属性来获取当前的web状态

       到这里对httpcontext类有了一个大致的了解,下面看看httpcontext的属性和方法。  属性和方法的详细使用可以查询MSDN

    附两张表:

属性:

名称

说明

 

 

AllErrors

获取在处理 HTTP 请求的过程中累积的错误数组。

 

Application

为当前 HTTP 请求获取 HttpApplicationState 对象。

 

ApplicationInstance

为当前 HTTP 请求获取或设置 HttpApplication 对象。

 

Cache

为当前 HTTP 请求获取 Cache 对象。

 

Current

为当前 HTTP 请求获取 HttpContext 对象。

 

CurrentHandler

获取表示当前正在执行的处理程序的 IHttpHandler 对象。

 

Error

获取在处理 HTTP 请求的过程中累积的第一个错误(如果有)。

 

Handler

获取或设置负责处理 HTTP 请求的 IHttpHandler 对象。

 

IsCustomErrorEnabled

获取一个值,该值指示是否已为当前 HTTP 请求启用自定义错误。

 

IsDebuggingEnabled

获取一个值,该值指示当前 HTTP 请求是否处于调试模式。

 

Items

获取可用于在 HTTP 请求过程中在 IHttpModule 接口和 IHttpHandler 接口之间组织和共享数据的键/值集合。

 

PreviousHandler

获取父处理程序的 IHttpHandler 对象。

 

Profile

获取当前用户配置文件的 ProfileBase 对象。

 

Request

为当前 HTTP 请求获取 HttpRequest 对象。

 

Response

为当前 HTTP 响应获取 HttpResponse 对象。

 

Server

获取提供用于处理 Web 请求的方法的 HttpServerUtility 对象。

 

Session

为当前 HTTP 请求获取 HttpSessionState 对象。

 

SkipAuthorization

获取或设置一个值,该值指定 UrlAuthorizationModule 对象是否应跳过对当前请求的授权检查。

 

Timestamp

获取当前 HTTP 请求的初始时间戳。

 

Trace

为当前 HTTP 响应获取 TraceContext 对象。

 

User

为当前 HTTP 请求获取或设置安全信息。

方法:

名称

说明

 

 

AddError

将异常添加到当前 HTTP 请求的异常集合中。

 

ClearError

清除当前 HTTP 请求的所有错误。

 

Equals 

已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。)

 

GetAppConfig

为当前应用程序返回请求的配置信息。

 

GetConfig

为当前 HTTP 请求返回所请求的配置信息。

 

GetGlobalResourceObject

已重载。 获取应用程序级别资源。

 

GetHashCode 

用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从Object 继承。)

 

GetLocalResourceObject

已重载。 获取页级别资源。

 

GetSection

获取当前应用程序的默认配置的指定配置节。

 

GetType 

获取当前实例的 Type。 (从 Object 继承。)

 

ReferenceEquals 

确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。)

 

RewritePath

已重载。 指定内部重写路径,并允许请求的 URL 与资源的内部路径不同。RewritePath 用在无 Cookie 会话状态中。

 

ToString 

返回表示当前 Object  String。 (从 Object 继承。)



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 48
    评论
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值