日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

HttpHandler

發(fā)布時(shí)間:2023/12/9 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpHandler 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
概述

HttpHandler是一個(gè)HTTP請(qǐng)求的真正處理中心,也正是在這個(gè)HttpHandler容器中,ASP.NET Framework才真正地對(duì)客戶(hù)端請(qǐng)求的服務(wù)器頁(yè)面做出編譯和執(zhí)行,并將處理過(guò)后的信息附加在HTTP請(qǐng)求信息流中再次返回到HttpModule中。

?

IHttpHandler是什么

IHttpHandler定義了如果要實(shí)現(xiàn)一個(gè)HTTP請(qǐng)求的處理所必需實(shí)現(xiàn)的一些系統(tǒng)約定。HttpHandlerHttpModule不同,一旦定義了自己的HttpHandler類(lèi),那么它對(duì)系統(tǒng)的HttpHandler的關(guān)系將是“覆蓋”關(guān)系。

?

IHttpHandler如何處理HTTP請(qǐng)求

當(dāng)一個(gè)HTTP請(qǐng)求經(jīng)同HttpModule容器傳遞到HttpHandler容器中時(shí),ASP.NET Framework會(huì)調(diào)用HttpHandlerProcessRequest成員方法來(lái)對(duì)這個(gè)HTTP請(qǐng)求進(jìn)行真正的處理。以一個(gè)ASPX頁(yè)面為例,正是在這里一個(gè)ASPX頁(yè)面才被系統(tǒng)處理解析,并將處理完成的結(jié)果繼續(xù)經(jīng)由HttpModule傳遞下去,直至到達(dá)客戶(hù)端。

對(duì)于ASPX頁(yè)面,ASP.NET Framework在默認(rèn)情況下是交給System.Web.UI.PageHandlerFactory這個(gè)HttpHandlerFactory來(lái)處理的。所謂一個(gè)HttpHandlerFactory,所謂一個(gè)HttpHandlerFactory,是指當(dāng)一個(gè)HTTP請(qǐng)求到達(dá)這個(gè)HttpHandler Factory時(shí),HttpHandlerFactory會(huì)提供出一個(gè)HttpHandler容器,交由這個(gè)HttpHandler容器來(lái)處理這個(gè)HTTP請(qǐng)求。

一個(gè)HTTP請(qǐng)求都是最終交給一個(gè)HttpHandler容器中的ProcessRequest方法來(lái)處理的。


1ProcessRequest方法

?


一個(gè)簡(jiǎn)單的
HttpHandler容器

通過(guò)實(shí)現(xiàn)IHttpHandler接口可以創(chuàng)建自定義HTTP處理程序,該接口只包含兩個(gè)方法。通過(guò)調(diào)用IsReusableIHttpHandlerFactory可以查詢(xún)處理程序以確定是否可以使用同一實(shí)例為多個(gè)請(qǐng)求提供服務(wù)。ProcessRequest方法將HttpContext實(shí)例用作參數(shù),這使它能夠訪問(wèn)RequestResponse內(nèi)部對(duì)象。在一個(gè)HttpHandler容器中如果需要訪問(wèn)Session,必須實(shí)現(xiàn)IRequiresSessionState接口,這只是一個(gè)標(biāo)記接口,沒(méi)有任何方法。


示例
1

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Web.SessionState;

?

namespace MyHandler

{

??? /// <summary>

??? /// 目的:實(shí)現(xiàn)一個(gè)簡(jiǎn)單的自定義HttpHandler容器

??? /// 作者:文野

??? /// 聯(lián)系:stwyhm@cnblogs.com

??? /// </summary>

??? public class MyFirstHandler : IHttpHandler,IRequiresSessionState

??? {

??????? #region IHttpHandler 成員

?

??????? public bool IsReusable

??????? {

??????????? get { return true; }

??????? }

?

??????? public void ProcessRequest(HttpContext context)

??????? {

??????????? context.Response.Write("<h1><b>Hello HttpHandler</b></h1>");

??????????? context.Session["Test"] = "測(cè)試HttpHandler容器中調(diào)用Session";

??????????? context.Response.Write(context.Session["Test"]);

??????? }

?

??????? #endregion

??? }

}

Web.config中加入如下配置:

<httpHandlers>

???? <add verb="*" path="*" type="MyHandler.MyFirstHandler, MyHandler"/>

</httpHandlers>


?

IHttpHandler工廠

ASP.NET Framework實(shí)際不直接將相關(guān)的頁(yè)面資源HTTP請(qǐng)求定位到一個(gè)其內(nèi)部默認(rèn)的IHttpHandler容器之上,而定位到了其內(nèi)部默認(rèn)的IHttpHandler工廠上。IHttpHandler工廠的作用是對(duì)IHttpHandler容器進(jìn)行調(diào)度和管理。

IHttpHandlerFactory接口包含兩個(gè)方法。GetHandler返回實(shí)現(xiàn)IHttpHandler接口的類(lèi)的實(shí)例,ReleaseHandler使工廠可以重用現(xiàn)有的處理程序?qū)嵗?/span>

?

示例2

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

?

namespace MyHandler

{

??? public class MyHandlerFactory : IHttpHandlerFactory

??? {

??????? #region IHttpHandlerFactory 成員

?

??????? public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)

??????? {

??????????? string fname = url.Substring(url.IndexOf('/') + 1);

??????????? while (fname.IndexOf('/') != -1)

??????????????? fname = fname.Substring(fname.IndexOf('/') + 1);

??????????? string cname = fname.Substring(0, fname.IndexOf('.'));

??????????? string className = "MyHandler." + cname;

?

??????????? object h = null;

?

??????????? try

??????????? {

??????????????? // 采用動(dòng)態(tài)反射機(jī)制創(chuàng)建相應(yīng)的IHttpHandler實(shí)現(xiàn)類(lèi)。

??????????????? h = Activator.CreateInstance(Type.GetType(className));

??????????? }

??????????? catch (Exception e)

??????????? {

??????????????? throw new HttpException("工廠不能為類(lèi)型"+cname+"創(chuàng)建實(shí)例。",e);

??????????? }

?

??????????? return (IHttpHandler)h;

??????? }

?

??????? public void ReleaseHandler(IHttpHandler handler)

??????? {

???????????

??????? }

?

??????? #endregion

??? }

?

??? public class Handler1 : IHttpHandler

??? {

??????? #region IHttpHandler 成員

?

??????? public bool IsReusable

??????? {

??????????? get { return true; }

??????? }

?

??????? public void ProcessRequest(HttpContext context)

??????? {

??????????? context.Response.Write("<html><body><h1>來(lái)自Handler1的信息。</h1></body></html>");

??????? }

?

??????? #endregion

??? }

?

??? public class Handler2 : IHttpHandler

??? {

??????? #region IHttpHandler 成員

?

??????? public bool IsReusable

??????? {

??????????? get { return true; }

??????? }

?

??????? public void ProcessRequest(HttpContext context)

??????? {

??????????? context.Response.Write("<html><body><h1>來(lái)自Handler2的信息。</h1></body></html>");

??????? }

?

??????? #endregion

??? }

}




轉(zhuǎn)載于:https://www.cnblogs.com/lds85930/archive/2008/09/07/1286364.html

總結(jié)

以上是生活随笔為你收集整理的HttpHandler的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。