国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Community Server專題五:IHttpHandlerFactory

2024-07-21 02:29:27
字體:
來源:轉載
供稿:網友

  如果你了解factory設計模式,這篇文章可以不用看,只要會配置ihttphandlerfactory就可以,不了解也沒有關系,通過下面的文章你可以學會如何使用ihttphandlerfactory,同時還會明白factory設計模式的廣義定義

  在前一篇專題中講解了httphandler在cs中的運用以及一些相關的話題。其實實現httphandler功能還有另外一個選擇就是handler factory(cs 中沒有用到handler factory),這是通過繼承ihttphandlerfactory接口來實現的。

  ihttphandlerfactory接口的定義如下:

interface ihttphandlerfactory
{
ihttphandler gethandler(httpcontext ctx, string requesttype, string url,string pathtranslated);
void releasehandler(ihttphandler handler);
}

  該接口中定義了2個方法,gethandler方法在請求開始的時候被調用,而releasehandler在請求結束,所有的handler都不再需要的時候被調用。

  如何使用呢?大致有三個步驟:

  1:定義實際處理httphandler的類(實現ihttphandler接口),這個類會在handlerfactory中被調用以進行業務處理,一個handlerfactory可以調用n個httphandler類(不然就不叫factory不是?。┻M行處理相關的業務邏輯。

  2:定義handlerfactory,例:

public class myhandlerfactory : ihttphandlerfactory
{
public ihttphandler gethandler(httpcontext ctx,string requesttype,string url,string pathtranslated)
{
//處理邏輯,最后返回一個httphandler類
}
public void releasehandler(ihttphandler handler) {}
}

  前一步說過,一個handlerfactory可以處理n個httphandler,什么時候該處理什么httphandler就在這里的處理邏輯中實現,例如:以上一篇專題防盜鏈中說到的,你可以定義兩個ihttphandler實現,分別處理對圖片與壓縮文件的請求。由于gethandler方法中傳入了httpcontext的上下文,因此可以對上下文中的url請求進行判斷,然后啟用不同的httphandler類。

  3:在web.config文件中注冊這個handlerfactory,注冊的方式與httphandler是一樣的。例:

<httphandlers>
<add verb="*" path="*.*"
type="mynamespace. myhandlerfactory, myassembly" />
</httphandlers>

  注意,這里不要再對httphandler進行配置了,無論你定義了多少ihttphandler實例,只要他們是通過httphandlerfactory調用實現其功能,在這里都不要去注冊它,不然就重復了。

  ihttphandlerfactory其實非常簡單,存在的思想就是factory設計模式(factory模式:利用給factory對象傳遞不同的參數,以返回具有相同基類或實現了同一接口的對象,這里指返回具有同一ihttphandler接口的對象)。

  什么時候你要使用ihttphandlerfactory而不去使用ihttphandler,我就個人的開發經驗做一下總結:

  1:在一個項目中需要使用很多ihttphandler的時候,而且對這些ihttphandler判斷都重復做一個同樣的前期處理,如果防盜鏈的例子中對圖片和壓縮兩個不同httphandler的處理,但是他們對url的判斷都是一致的,在.text中使用了ihttphandlerfactory,而不是ihttphandler,對于url的請求全都(*.asmx、error.aspx除外)轉交由一個ihttphandlerfactory入口統一處理。

  2:從部署和松散耦合考慮,如果你的web application足夠大(我目前還沒有設計過這種大型app),你就要考慮在更換httphandler處理類的時候該不該去改動web.config的配置,這種改動將會重新啟動整個app,對于一些系統而言這是不可以隨便進行的。這個時候,統一一個入口的ihttphandlerfactory很重要,這個入口相對不變,而ihttphandler實現可以通過外掛自定義的xml文件來實現松散耦合,運用一些反射什么的就可以實現了。

  如果對ihttphandlerfactory有其他見解的朋友請留下你的觀點。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庄浪县| 肃宁县| 洪泽县| 麻城市| 中西区| 绿春县| 青海省| 台湾省| 邵东县| 新安县| 六枝特区| 长岛县| 庆云县| 温泉县| 鸡西市| 盱眙县| 苍南县| 略阳县| 大洼县| 梅河口市| 封开县| 新宁县| 静安区| 山东| 高安市| 吴桥县| 松江区| 仙居县| 合作市| 吉林省| 内丘县| 土默特左旗| 万载县| 长乐市| 绥芬河市| 册亨县| 图片| 遂川县| 宝丰县| 清新县| 南部县|