SlideShare a Scribd company logo
1 of 74
Asp.Net 原理
大綱
Asp.Net 初使化
AppDomain
.NET
AppDomain
AppDomain
隔離
缷載
安全
配置
AppDomain
如何跨域存取?
AppDomain AppDomain
System.MarshalByRefObject
Asp.Net 初使化
AppDomain
.NET
AppDomain
AppDomain
ASP.NET
ApplicationHost
+ CreateApplicationHost(Type hostType, string virtualDir, string physicalDir ) : object
hostType 必須繼承自 System.MarshalByRefObject
hostType載入組件的方式
Global Assembly Cache
網站目錄的bin資料夾
%windir%assembly
ASP.NET如何處理收到的要求
ASP.NETClient
Request
Response
System.Web.HttpRuntime
+ ProcessRequest ( HttpWorkerRequest wr ) : void
HttpContext
建立
HttpWorkerReuest
建立
呼叫方法
HttpApplication
建立
指派
HttpContext
Request
Response
User
Handler
Cache
SessionServer
Application
Profile
Response
Request
Request
Form
Cookies
Header
PostFile…….
Response
StatusCode
Cookies
Header
Output…….
Response
StatusCode
Cookies
Header
Output
…….
Request
Form
Cookies
Header
PostFile
…….
Server如何建立Cookie
Client ASP.NET
Request
Response + Cookie
Cookieless
http://MySite.com/MyWebApplication/(A(XXXX)S(XXXX)F(XXXX))/home.aspx
Anonymous-ID
Session-ID
Forms Authentication ticket
下載檔案名稱變亂碼
//使用UrlPathEncode編碼
string fileName = Server.UrlPathEncode("檔 案 名稱.doc");
//瀏覽器解晰後,會自動解晰為正確的檔案名稱
string contentDisposition = string.Format("attachment; fileName={0}", fileName);
Response.AddHeader("Content-Disposition", contentDisposition);
瀏覽器類型
Client ASP.NET
Header:User-Agent
Response
參考連結:HOW TO:在 ASP.NET Web 網頁中偵測瀏覽器類型
xxx.Browser
1
2
3
瀏覽器類型
xxx.Browser
路徑:%windir%Microsoft.NETFrameworkv4.0.30319ConfigBrowsers
瀏覽器類型
參考連結:HttpBrowserCapabilities 類別
<browser id="Chrome" parentID="WebKit">
<capabilities>
<!-- 預設為fale,未設定的話就會變成不支援Cookie了 -->
<capability name="cookies" value="true" />
…
</capabilities>
</browser>
HttpApplication
HttpApplicationPool
HttpApplication
HttpApplication
HttpApplication
HttpApplication
HttpApplication
HttpApplicationFactory
( class )
獲取可用的 HttpApplication
HttpRuntime
取得HttpApplication
取得 HttpApplication
每個 HttpApplication 物件
僅能處理一個要求,不需考
慮併行處理的問題 。
1
2
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
Client ASP.NET
Response
Httpapplication pipeline
Request
1
2
3
取得狀態
執行處理程式
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
1
2
3
4
5
6
7
8
9
10
11
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
2
3
4
5
6
7
8
9
10
11
PreSendRequestHeaders
PreSendRequestContent
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
1
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
1
BeginReqeust
ASP.NET 處理工作的進入點
處理工作的開始
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
2
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
2
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
2
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
2
AuthenticateRequest PostAuthenticateRequest
檢查使用者的身份 已檢查使用者的身份並設定:
- HttpContext.User.Identity.IsAuthenticated
身份驗證
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
3
3
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
3
3
AuthorizeRequest PostAuthorizeRequest
權限檢查 已檢查完權限
- 若無權限則直接跳至 EndRequest
授權
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
4
4
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
ResolveRequestCache PostResolveRequestCache
取得以前快取的處理結果
- 若快取過,則回傳快取結果
已完成快取的取得工作
解晰快取
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
5
5
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
5
5
PostMapRequestHandler
ASP.NET 已對應目前要求至適當的
事件處理常式 (event hanlder)
- 對應至 HttpContext.Handler
映對處理程式
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
6
6
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
6
6
取得狀態
AcquireRequestState PostAcquireReqestState
取得之前儲存的使用者資料
- 一般用於Session
已取得使用者資料
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
7
7
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
7
7
執行處理程式
PreRequestHanlderExecute PostRequestHanlderExecute
準備執行處理常式 處理常式已執行完畢
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
8
8
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
8
8
發佈狀態
ReleaseRequestState PostReleaseRequestState
儲存目前的狀態資料 目前的狀態資料已儲存
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
9
9
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
9
9
更新快取
UpdateRequestCache PostUpdateRequestCache
更新需要快取的內容 目前的快取已更新
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
10
10
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
10
10
記錄要求
LogRequest PostLogRequest
將這次的要求記錄至日誌內 已將這次的要求記錄至日誌內
需使用 ASP.NET 4.0 以上的版本
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
11
11
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
11
11
EndRequest
將處理結果送至Client端
發送要求
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
Pipeline Event
11
11
取得要求
HttpApplication pipeline 小結
取得使用者資料 取得頁面結果 更新使用者資料
回傳結果- HttpContext.Item為不同事件傳遞資料的容器
- 自訂方式需透過IHttpModule 或 Global.asax
記錄要求
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
ResolveRequestCache
UpdateRequestCache
OutputCacheModule
管理快取的輸出
更新需要快取的內容
取得以前快取的處理結果
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
AcquireRequestState
ReleaseRequestState
SessionStateModule
管理Session的狀態
儲存目前的Session
取得之前儲存的Session
EndRequest
將處理結果送至Client端
Session State Store
Provider
InProc
SQL Server
State Server
Custom
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
AcquireRequestState
ProfileModule
管理個人化資料
取得profile節點的資料
EndRequest
將處理結果送至Client端
Config
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
AnonymousIdentificationModule
管理個人化資料
給予使用者一個唯一的匿名識別
PostAuthenticateRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
AnonymousIdentificationModule
管理個人化資料
給予使用者一個唯一的匿名識別
PostAuthenticateRequest
<configuration>
<system.web>
<anonymousIdentification enabled="true"/>
</system.web>
</ configuration>
Web.Config 設定方式
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
FormAuthenticationModule
表單驗證
進行使用者的驗證處理
AuthenticateRequest
EndRequest
是
此頁是否為
LoginUrl
將處理結果送至Client端
否
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
FormAuthenticationModule
表單驗證
進行使用者的驗證處理
AuthenticateRequest
EndRequest
是
此頁是否為
LoginUrl
將處理結果送至Client端
否
Web.Config 設定方式
<system.web>
<authentication mode="Forms">
<forms loginUrl="logon.aspx"
name=".ASPXFORMSAUTH">
</forms>
</authentication>
</system.web>
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
RoleManagerModule
Context.User = new RolePrincipal(context.User.Identity);
建立 Httpcontext.User
(GenericPrincipal 類別)
PostAuthorizeRequest
EndRequest
建立Cookie存放資訊
AuthenticateRequest
ForumsAuthenticationModule
PostAuthenticateRequest
Context.User = new GenericPrincipal( …. )
覆蓋 Httpcontext.User
(RolePrincipal 類別)
Context.User.IsInRole( … )
RoleManagerModule
透過 Cookie 確認
角色權限
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
WindowsAuthenticationModule
Windows驗證
進行使用者的驗證處理
AuthenticateRequest
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
WindowsAuthenticationModule
Windows驗證
進行使用者的驗證處理
AuthenticateRequest
Web.Config 設定方式
<system.web>
<authentication mode="Windows">
</authentication>
</system.web>
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
UrlAuthorizationModule
Url存取授權
權限檢查
AuthorizeRequest
設定於 Web.config 文件中的
<authorization> 和 <location>
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
UrlAuthorizationModule
Url存取授權
權限檢查
AuthorizeRequest
Web.Config 設定方式
<configuration>
<location path="bobsSecret.aspx">
<system.webServer>
<security>
<authorization>
<remove users="" roles="BobAndFriends" verbs="" />
<add accessType="Allow" users="Bob" />
</authorization>
</security>
</system.webServer>
</location>
</configuration>
身份驗證
授權
解晰快取
映對處理程式
發佈狀態
更新快取
記錄要求
發送要求
取得狀態
執行處理程式
權限檢查
AuthorizeRequest
FileAuthorizationModule
檔案存取授權
只適用於Windows的身份驗證
Access Control List
不驗證靜態檔案( .html , .img…等)
HttpModule 設定檔
machine.config web.config
全域 單一站台
machine.config
路徑:%windir%Microsoft.NETFrameworkASP.NET 版本Config
machine.config
路徑:%windir%Microsoft.NETFrameworkASP.NET 版本Config
HttpModule註冊方式
<system.webServer>
<modules>
<add name="MyHttpModule"
type="ClassLibrary1.SyncModule,ClassLibrary1"/>
</modules>
</system.webServer>
namespace ClassLibrary1
{
public class SyncModule : IHttpModule
{
…
}
}
HttpModule註冊方式
<system.webServer>
<modules>
<add name="MyHttpModule"
type="ClassLibrary1.SyncModule,ClassLibrary1"/>
</modules>
</system.webServer>
namespace ClassLibrary1
{
public class SyncModule : IHttpModule
{
…
}
}
IIS 7- 註冊全域Http Module的兩種方式
ApplicationHost.config
<globalModules>
…………
</globalModules >
IIS 管理介面
參考連結:Global Modules <globalModules>
不使用組態檔註冊HttpModule
[assembly: PreApplicationStartMethod(typeof(NameSpace.MyClass), "MyMethod")]
public static class MyClass {
public static void MyMethod() {
//…
}
}
參考連結:PreApplicationStartMethodAttribute 類別
不使用組態檔註冊HttpModule
HttpApplicationFactory
( class )
網站
啟動
HttpApplication
建立
一般 *.config
動態 Assembly
登錄
HttpModule
不使用組態檔註冊HttpModule
[assembly: PreApplicationStartMethod(typeof(NameSpace.MyClass), "MyMethod")]
public static class MyClass {
public static void MyMethod() {
//…
}
}
參考連結:PreApplicationStartMethodAttribute 類別
注意事項
會在 動態編譯 和 Applcation_Start 前執行
需使用 .NET Framework 3.5 以上的版本
必須是 public 和 static
如何取得HttpModules
HttpApplication httpApps = HttpContext.ApplicationInstance;
HttpModuleCollection httpModuleCollections = httpApps.Modules;
global.asax 中 HttpApplication事件的自動登錄
protected void Application_事件名稱()
protected void Application_事件名稱()
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
Event
protected void Application_PostAuthenticateRequest ()
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
Event
PreSendRequestHeaders
PreSendRequestContent
Event
protected void Application_PostAuthenticateRequest ()
BeginReuest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireReqestState
PreRequestHanlderExecute
PostRequestHanlderExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
注意事項
必須是 System.EventHandler
存取的事件必須為 public
參考資料
• Asp.Net 本質論(書)
• OutputCacheProvider OutputCache的一点点认识

More Related Content

Similar to Asp net原理

钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会Zhi Zhong
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践Li JianYe
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmiyiditushe
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geekJohnson Gau
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
廖雪峰 Saa s ovp
廖雪峰 Saa s ovp廖雪峰 Saa s ovp
廖雪峰 Saa s ovpdrewz lin
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
 
透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 AppsEric ShangKuan
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
静态项目管理工具 - opm
静态项目管理工具 - opm静态项目管理工具 - opm
静态项目管理工具 - opmgoto100
 
通行证项目技术分享
通行证项目技术分享通行证项目技术分享
通行证项目技术分享Tony Deng
 
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Justin Lin
 
Script with engine
Script with engineScript with engine
Script with engineWebrebuild
 
Open Api&Sip
Open Api&SipOpen Api&Sip
Open Api&Sipcenwenchu
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5 Tony Deng
 

Similar to Asp net原理 (20)

Berserk js
Berserk jsBerserk js
Berserk js
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmi
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
廖雪峰 Saa s ovp
廖雪峰 Saa s ovp廖雪峰 Saa s ovp
廖雪峰 Saa s ovp
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
静态项目管理工具 - opm
静态项目管理工具 - opm静态项目管理工具 - opm
静态项目管理工具 - opm
 
通行证项目技术分享
通行证项目技术分享通行证项目技术分享
通行证项目技术分享
 
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
 
Script with engine
Script with engineScript with engine
Script with engine
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
Open Api&Sip
Open Api&SipOpen Api&Sip
Open Api&Sip
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 

Asp net原理

Editor's Notes

  1. 隔離:不同應用程式定義域之間不能直接去存去存取,跨應用程式定義域存取的物件必須衍生自System.MarshalByRefObject 缷載:被載入的組件只能以應用程式定義域為單位缷載 安全:以應用程式定義域為邊界的安全機制 配置:以應用程式定義域為邊界的程式配置
  2. 隔離:不同應用程式定義域之間不能直接去存去存取,跨應用程式定義域存取的物件必須衍生自System.MarshalByRefObject 缷載:被載入的組件只能以應用程式定義域為單位缷載 安全:以應用程式定義域為邊界的安全機制 配置:以應用程式定義域為邊界的程式配置
  3. HttpContext 處理完每一次的要求之後,會被丟棄,新的要求會再建立一個新的 HttpApplication 內會有處理管線讓程式人員有擴充的機制
  4. FileAuthorizationModule 驗證靜態檔案的工作會交由IIS,而不是aspnet_isapi.dll(HttpModule才會由它處理),因此預設只能處理動態檔案(*.aspx , *.ascx),但都要經由ACL去做權限驗證