【包建強】ASP.NET底層機制 HttpHandler
1.IHttpHandler介面
定義了實現一個HttpRequest的處理所必須實現的一些系統約定方法。
public interface IHttpHandler
{
//其他Request是否可以使用IHttpHandler
bool IsReusable { get; }
//處理HttpRequest
void ProcessRequest(HttpContext context);
}
{
//其他Request是否可以使用IHttpHandler
bool IsReusable { get; }
//處理HttpRequest
void ProcessRequest(HttpContext context);
}
NET為ASP.NET提供了很多系統預設HttpHandler類,用來適應不同型別的HttpRequest
比如aspx,在machine.config中是這樣定義的:
說明遇到aspx的Request,ASP.Net會將其交給System.Web.UI.PageHandlerFactory的HttpHandler類來處理
如果自己定義了新的HttpHandler,而且在Web.config中指定,則系統只會使用這個新的HttpHandler,而不再使用原先指定的
2.HttpHandler實現了IHttpHandler介面
一個aspx頁面在HttpHandler容器中的ProcessRequest方法才被系統真正的處理解析——即交給PageHandlerFactory處理,該工廠負責提供一個HttpHandler容器,由其處理HttpRequest
3.如果要在HttpHandler容器中使用Session,必須要實現IRequiresSessionState介面——這只是一個空介面,一個標記
using System;
using System.Web;
using System.Web.SessionState;
namespace MyNamespace
{
public class MyHandler:IHttpHandler,IRequiresSessionState
{
public MyHandler() {}
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
HttpResponse response = context.Response;
HttpRequest request = context.Request;
HttpSessionState Session = context.Session;
Session["test"] = "hi";
response.Write("Hello world!");
response.Write(Session["test"]);
}
}
}
using System.Web;
using System.Web.SessionState;
namespace MyNamespace
{
public class MyHandler:IHttpHandler,IRequiresSessionState
{
public MyHandler() {}
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
HttpResponse response = context.Response;
HttpRequest request = context.Request;
HttpSessionState Session = context.Session;
Session["test"] = "hi";
response.Write("Hello world!");
response.Write(Session["test"]);
}
}
}
同時,還要在Web.config中加上宣告:
<httpHandlers>
<add verb="*" path="*" type="MyNamespace.MyHandler,MyNamespace">add>
httpHandlers>
<add verb="*" path="*" type="MyNamespace.MyHandler,MyNamespace">add>
httpHandlers>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-406694/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript 閉包的底層執行機制JavaScript
- JavaScript閉包的底層執行機制JavaScript
- Java 底層機制Java
- ASP.NET的底層的工作機制介紹ASP.NET
- php底層原理之垃圾回收機制PHP
- 併發機制的底層實現
- javascript事件機制底層實現原理JavaScript事件
- PHP底層的執行機制與原理PHP
- PHP 底層的執行機制與原理PHP
- 細說計算機底層整型編碼機制計算機
- 【深入 PHP】PHP7 底層執行機制PHP
- HashMap的底層結構、原理、擴容機制HashMap
- Redisson的看門狗機制底層實現Redis
- PHP 底層的執行機制與原理解析PHP
- Java 併發機制底層實現 —— volatile 原理、synchronize 鎖優化機制Java優化
- 瞭解ASP.NET底層架構ASP.NET架構
- 深入詳解Java反射機制與底層實現原理?Java反射
- day13-實現Spring底層機制-03Spring
- day08-SpringMVC底層機制簡單實現-04SpringMVC
- Java 底層機制(JVM/堆/棧/方法區/GC/類載入)JavaJVMGC
- 圖解Android事件分發機制(深入底層原始碼)圖解Android事件原始碼
- 【讀書筆記】Java併發機制的底層實現原理筆記Java
- IL程式碼底層執行機制之迴圈處理 (轉)
- CSS層疊機制CSS
- ASP.NET三劍客 HttpApplication HttpModule HttpHandler 解析ASP.NETHTTPAPP
- Runtime底層原理探究(二) --- 訊息傳送機制(慢速查詢)
- Runtime底層原理探究(一) --- 訊息轉發機制(快速轉發)
- iOS底層原理總結篇-- 深入理解 KVC\KVO 實現機制iOS
- [Java併發系列] 1.Java併發機制的底層實現Java
- Mysql鎖機制與最佳化實踐以及MVCC底層原理剖析MySqlMVC
- ASP.NET Core 教學 - 強制 SSLASP.NET
- Runtime底層原理探究(三) --- 訊息轉發機制(動態方法解析)
- 徹底理解 Dart mixin 機制Dart
- OC底層探索(十六) KVO底層原理
- 強制安裝一個RPM包
- 強大的CAS機制
- slub機制徹底圖解分析圖解
- linux中斷底半部機制Linux