成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET httpHandler使用淺析

開發 后端
ASP.NET httpHandler使用是如何實現呢?那么本文就向你介紹一個ASP.NET httpHandler使用簡單實現的例子。

ASP.NET httpHandler使用是如何的呢?來我們先看看討論:先來分析ASP.NET處理一個web請求的過程。學習ASP.NET技術,除了翻看人家的文檔(這是最基本的,知識就是知識,不懂的基本知識無法深入學習),還應當自己學會琢磨,動手實習。

當我們從客戶端發出一個web請求后,到達web服務器,由web服務器處理或者轉給asp.net框架處理。如果不存在web服務器(采用asp.net的缺省web處理),那你可以參鄙人的《CASSINI源代碼分析》http://blog.csdn.net/shanhe/archive/2004/11/10/176422.aspx和 《實現自己的ASP.NET宿主系統》http://blog.csdn.net/shanhe/archive/2004/05/27/5429.aspx。

ASP.NET httpHandler使用問題:假設請求到了ASP.NET的框架,系統回怎么處理呢?

Asp.net系統框架自身有一個http處理的邏輯。這個邏輯由machine.config的 名為httpRuntime的節指定

  1. ﹤httpHandlers﹥。。。﹤/httpHandlers﹥ 

告訴ASP.NET框架一個應用程序的http處理程序缺省情況下該如何決定處理邏輯。所謂如何處理是指http 謂詞(Verb)和資源的位置(Path)組合決定的請求的處理。

例如:

  1. ﹤add  
  2.  
  3.    verb="*" 
  4.  
  5.   path="*.aspx" 
  6.  
  7.   type="System.Web.UI.PageHandlerFactory" /﹥ 

告訴ASP.NET在處理任何”.aspx”的文件的任何請求(post/get/head/put)時候都應該使用System.Web.UI.PageHandlerFactory類處理請求。這個類是系統框架缺省類,遵循System.Web.IhttpHandler接口(但是由MS官方實現)。如果你在研究透aspx頁框架后,你可以自己寫一個aspx頁工廠處理程序,簽名后加入全局應用程序,再修改此處即可讓aspx頁面沒處理時是按照自己實現的邏輯進行(你甚至可以不遵循頁面控件實現邏輯,雖然那樣并無太大意義)。

我們來做個實驗:我們利用瀏覽器發出對.config文件的請求(譬如web.config),卻省情況下asp.net會報告錯誤,但是假若我們刪除machine.config中的

  1. ﹤add  
  2.  
  3.     verb="*" 
  4.  
  5.     path="*.config" 
  6.  
  7.    type="System.Web.HttpForbiddenHandler" /﹥ 

并保存。重新請求該文件后,那么會看到瀏覽器可以讀取到此文件并可顯示。重新加上該節,重新請求會看到系統報告錯誤。這充分說明了http處理工廠是根據配置文件進行處理的。據此類推,我們可以閱讀machine.config的其他相關配直節,充分理解系統缺省處理邏輯是如何處理web請求(具體為合法的http請求)的。另外,web.config也可以據此增加/刪除指定http處理程序。參考MSDN,我們發現,任何一個HTTP處理程序實際上是實現了System.Web.IhttpHandler接口的asp.net類。接口應當實現一個屬性和一個借口方法:

公共屬性

IsReusable 獲取一個值,該值指示其他請求是否可以使用 IHttpHandler 實例。決定了此處理程序是否可以重用(通常克服用意味著系統性能的提高)

公共方法

ProcessRequest 通過實現 IHttpHandler 接口的自定義 HttpHandler 啟用 HTTP Web 請求的處理。也就是處理實現。

ASP.NET httpHandler使用問題:假設我們寫好了一個http處理程序,如何讓他發揮作用呢?譬如,我們需要禁止asp.net下載.info文件,我們應該進行如下處理:

***步,在web服務器上增加指示,讓asp.net處理此擴展名。具體為:

打開IIS(假設web服務器是IIS),找到應用程序,配置,應用程序映射,添加映射,在可執行文件中輸入當前.net版本的aspnet_isapi.dll(如C:\WINNT\Microsoft.NET\Framework\v1.0.3705\aspnet_isapi.dll),擴展名輸入.info,謂詞全部,檢查文件是否存在。經過這些步驟,確保IIS不會自作多情處理.info文件,而讓給aspnet_isapi.dll處理,后者則會將請求交給asp.net進行處理。

第二步,在machine.config或者web.config中加入相映配置節。都是在﹤System.Web〉中的加入﹤httphandler﹥子節,按照格式指定,譬如:

  1. ﹤httphandlers﹥  
  2.  
  3.  …  
  4.  
  5.  ﹤add verb=”*” path=”*.info” type=” System.Web.HttpForbiddenHandler”﹥  
  6.  
  7. …  
  8.  
  9. ﹤/httphandlers﹥ 

經過上述節配置,.info文件會被保護起來,任何企圖訪問都會被告知“無法提供此類型的頁。”;如果換成你自己的類,則被asp.net框架所調用來處理.info請求。

下面來實現一個http處理程序例子,我們增加一個擴展名.img,img文件根據參數生成一個圖片,譬如我們向ASP.NET框架請求 abc.img,那么系統返回content為image/jpg格式的圖片,圖片內容為abc

源代碼如下:

  1. using System;  
  2.  
  3. using System.Web ;  
  4.  
  5. using System.Drawing;   
  6.  
  7. using System.Drawing.Drawing2D ;   
  8.  
  9. using System.Drawing.Imaging ;   
  10.  
  11.    
  12.  
  13. namespace ImyWeb  
  14.  
  15. {  
  16.     public class IMG : System.Web.IHttpHandler   
  17.  
  18.     {  
  19.  
  20.          public IMG()  
  21.  
  22.          {}  
  23.  
  24.            public bool IsReusable  
  25.  
  26.         {  
  27.  
  28.              getreturn true;}  
  29.     }  
  30.         public void ProcessRequest(HttpContext context)  
  31.  
  32.         {  
  33.  
  34.       string vstr=_getViewString(context);  
  35.  
  36.       context.Response.ContentType ="image/jpeg";   
  37.  
  38.       Image img=new Bitmap(128,128,PixelFormat.Format32bppArgb );  
  39.  
  40.         Graphics g=Graphics.FromImage(img);  
  41.  
  42.          Brush backBrush=new SolidBrush(Color.Gray ); //灰色  
  43.  
  44.                    Brush textBrush=new SolidBrush(Color.Black );   
  45.  
  46.              g.FillRectangle(backBrush,0,0,128,128);  
  47.  
  48.                    Font ft=new Font( "Arial",32);  
  49.  
  50.        g.DrawString(vstr,ft,textBrush,  
  51.   new RectangleF(0,0,128,128),  
  52.   new StringFormat(StringFormatFlags.NoWrap ));  
  53.  
  54.                    img.Save(context.Response.OutputStream,ImageFormat.Jpeg );  
  55.  
  56.                    context.Response .Flush();  
  57.  
  58.          backBrush.Dispose();  
  59.  
  60. textBrush.Dispose();   
  61.  
  62. g.Dispose();  
  63.  
  64. img.Dispose();   
  65.  
  66. return ;  
  67.  
  68.          }  
  69.  
  70.           //************//  
  71.  
  72.           private string _getViewString(HttpContext context)  
  73.  
  74.          {  
  75.  
  76.               string str= context.Request.RawUrl ;  
  77.  
  78.               int l1=str.LastIndexOf("/");  
  79.  
  80.               int l2=str.LastIndexOf(".");   
  81.  
  82.               return str.Substring(l1+1,l2-l1-1);   
  83.  
  84.          }  
  85.  
  86.       }  
  87.  

編譯后,得到應用程序為myHttpHandler.dll。

現在,我們需要告訴ASP.NET應用程序(假設我們的web應用程序在localHost/webApp1下),如何處理.img文件了:

***步,在web服務器上增加指示,讓asp.net處理此.img的擴展名(讓IIS歇著吧,不要插手asp.net的事了,讓asp.net處理*.img了)

第二,在web.config中的﹤system.web﹥節中增加:

  1. ﹤httpHndlers﹥  
  2.  
  3.       ﹤add verb="*" path="*.img" type="IBuySpy.IMG,IMGHttphandler" /﹥  
  4.  
  5. ﹤/httpHndlers﹥ 

為了能夠讓ASP.NET程序能夠定位到應用程序集,將myHttpHandler.dll拷貝到web應用程序的bin目錄

接下來,我們測試:在測試的web應用程序WebApp1下隨意請求一個.img的資源,將會得到一個jpg圖片。http://localhost/WebApp1/test.img

以上為一個簡單的ASP.NET httpHandler處理程序的設計、安裝過程。實際上,假設你對asp.net缺省的*。aspx 的HttpHandler處理不滿,你可以自己進行設計,替換覆蓋掉machine.config中關于*.aspx的缺省處理類 "System.Web.UI.PageHandlerFactory”。你要明白,ms設計了一個服務框架,而這個框架內具有了基本的處理能力,但是優秀的是這個框架的部分落及是可以根據自己的意愿進行替換的(我們看到大量的接口使用,我們應當意識到那是使用了大量的現代軟件設計技術和思想)。學習asp.net技術要站在全局來了解框架各個組成部分間如何執行、調用、發生關系、縣戶作用,這比實現了一個花哨的datagrid要更有意義。

ASP.NET httpHandler使用簡單的例子就向大家介紹到這里,希望大家能夠了解ASP.NET httpHandler使用基本情況。

【編輯推薦】

  1. ASP.NET自定義控件入門淺析
  2. ASP.NET服務器控件視圖淺析
  3. ASP.NET組件設計之生命周期詳解
  4. ASP.NET組件設計之傳輸機制淺析
  5. ASP.NET組件設計之復雜屬性和狀態管理淺析
責任編輯:仲衡 來源: 博客園
相關推薦

2009-08-03 10:07:20

ASP.NET Ses

2009-07-29 14:12:45

ASP.NET tra

2009-07-29 13:42:25

ASP.NET注釋

2009-08-05 18:36:12

ASP.NET Che

2009-07-24 13:41:15

ASP.NET AJA

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET優點

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設計

2009-08-07 17:59:35

控件設計器

2009-07-31 11:45:42

ASP.NET文件下載

2009-07-29 15:55:48

ASP.NET Req

2009-08-04 15:20:59

ASP.NET數據驗證數據驗證控件

2009-07-29 09:34:54

IsPostBack屬ASP.NET

2009-08-04 17:16:16

ASP.NET代碼優化

2009-08-05 16:17:29

ASP.NET For

2009-08-05 16:50:09

ASP.NET For

2009-07-24 18:02:46

ASP.NET編程

2009-08-05 16:53:14

ASP.NET組件設計

2009-08-05 13:16:43

ASP.NET URL

2009-07-27 17:25:53

ASP.NET驗證控件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美做暖暖视频 | 国产在线第一页 | 免费精品久久久久久中文字幕 | 欧美成视频在线观看 | 国产ts人妖另类 | 欧美成人第一页 | 日韩在线中文字幕 | www.国产91| 中文字幕成人网 | 野狼在线社区2017入口 | 伊人亚洲| 国产日韩欧美在线 | 国产一区二区三区四区在线观看 | 日日操操 | 午夜精品一区二区三区在线播放 | 日日夜夜免费精品视频 | 国产av毛片 | 精品久久久一区二区 | 国产精品一区在线观看 | 狠狠综合网 | 91精品一区二区三区久久久久 | 国产精品自在线 | 国产在线一区观看 | 天天躁日日躁狠狠躁白人 | 中文字幕在线观看www | 久久精品亚洲精品国产欧美 | 日韩成人免费视频 | 99久久电影 | 99精品欧美一区二区蜜桃免费 | 天天操天天插天天干 | 国产在线www | 欧美成人a| 一级做a爰片性色毛片16美国 | 欧美伊人 | 在线播放中文 | 人人看人人草 | 国产伦精品一区二区三区精品视频 | 日韩三级视频 | 精品在线99 | 欧美.com | 夜久久 |