原文鏈接:https://blog.csdn.net/kanglix1an/article/details/17269445
今天我們來說一下一般處理程序,一般處理程序是什麼呢? 一般處理程序實際上就是一個處理程序類。那麼我們爲什麼要用?用他有什麼優勢? 對於ASP.NET網站來說,網站最常見的處理結果就是HTML網頁,生成網頁的工作通常使用拓展名爲ASPX的web窗體來完成。對於處理結果不是HTML的請求,都可以通過一般處理程序完成,例如:RSS、Feed、XML、圖片等。一般處理程序是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 對象的引用。該對象提供對請求的內部 Request、Response 和 Server 屬性的訪問。
1.生命週期:從用戶發送請求開始到服務器處理完請求並生成內容返回到客戶端爲止。針對每個不同用戶的請求,服務器都會創建一個新的HttpContext實例直到請求結束,服務器銷燬這個實例.
2.HttpContext的作用:處理請求的屬性如:request,response,server等。其實我們在開發asp.net頁面的時候,可以直接使用request等,那爲什麼要通過HttpContext類來訪問呢?因爲request等這些可以在aspx頁面的代碼中直接使用,但是在IHttpModule或IHttpHandler中就不能直接使用。HttpContext類對Request、Response、Server等進行了封裝,保證在整個請求週期內都可以隨時隨地地調用。
3.HttpContext其它功能:HttpContext還可以處理CacHe,HttpContext.Item等,在其生命週期內可以存儲一些臨時數據,方便隨時使用。當用戶發送某個Http請求,我們可以通過HttpContext進行截獲,查看裏面包含了哪些請求的信息,然後可以進行一系列的操作,比如說切換到其他的頁面,這個時候,可以重組請求的數據滿足新頁面的要求。即:即使不在page頁面中,也可以通過HttpContext的Current屬性來獲取當前的web狀態。
到這裏對httpcontext類有了一個大致的瞭解,下面看看httpcontext的屬性和方法。 屬性和方法的詳細使用可以查詢MSDN。
附兩張表: