2011-08-09 5 views
10

저는 ASP.NET과 ASP.NET MVC 뒤에있는 "plumbing"을 더 잘 이해하려고합니다. 나는 많은 도움이 된 this page을 읽었습니다. 지금까지 모든 ASP.NET 사이트에는 System.Web.HttpApplication에서 상속받은 클래스가 있습니다. HttpApplication은 BeginRequest, AuthorizeRequest, End Request 등과 같은 HttpModule과 HttpHandlers를 트리거하는 일련의 이벤트를 가지고 있습니다. HttpModules과 HttpHandlers는 현재 HttpContext를 읽고 쓰고 있습니다.ASP.NET MVC는 ASP.NET에 어떻게 연결되어 있습니까?

ASP.NET에서 사용하는 HttpApplication 클래스를 어떻게 알 수 있습니까? 내 응용 프로그램에는 Global.asax 파일의 일반적인 MvcApplication 클래스가 있습니다. 그러나 MVC와 관련된이 클래스에는 아무것도 표시되지 않습니다. 또한이 클래스를 "응용 프로그램"으로 할당하는 설정은 어디에서도 볼 수 없습니다. ASP.NET은 HttpApplication 클래스를 만들 때 Global.asax라는 파일을 항상 찾습니다. 아니면 ASP.NET은 내 어셈블리에서 HttpApplication으로부터 상속받은 모든 클래스를 찾습니다.

또한 모듈과 처리기를 어떻게 사용해야하는지 어떻게 알 수 있습니까? 위에서 언급 한 페이지에서는 web.config를 통해 핸들러와 모듈 및 설정을 지정한다고 설명했습니다. 하지만 내 ASP.NET MVC 응용 프로그램에는 web.config에 이러한 설정이 없습니다.

OutputCache 
Session 
WindowsAuthentication 
FormsAuthentication 
PassportAuthentication 
RoleManager 
UrlAuthorization 
FileAuthorization 
AnonymousIdentification 
Profile 
ErrorHandlerModule 
ServiceModel 
UrlRoutingModule-4.0 
ScriptModule-4.0 
__DynamicModule_System.Web.WebPages.WebPageHttpModuleDefaultAuthentication 

어디이 지정된 :

나는 다음 내 활동 방법 중 하나에 중단 점을 설정하고 HttpContext.Current.ApplicationInstance.Modules 내가 볼을 선택하면? 마찬가지로 HttpContext.Current.Handler를 확인하면 System.Web.Mvc.MvcHandler으로 설정되어 있음을 알 수 있습니다.

답변

5

는 :

1) 그것은 당신의 응용 프로그램에 부담 모든 web.configs에 의해 지정된 모든 HTTP 모듈을로드합니다.

2) 시스템이 ASP.NET MVC를 사용하는 경우 global web.configUrlRoutingModule을 등록하여 요청 파이프 라인에 통합합니다.

이제 global.asax에서 HttpApplication (예 : MvcApplication 표준)에서 파생 된 클래스가 dll로 컴파일됩니다. 그걸 염두에두고 ...

5) ASP.NET 런타임은 HttpApplication에서 파생되는 클래스에 대해 YourApplication.dll을 검색하고 해당 메서드 (예 : Application_Start)를 실행합니다.

6) 관용적 인 ASP.NET MVC MapRoute 확장 메서드를 사용하여 경로를 만들면 경로가 MvcRouteHandler과 연결됩니다.

7) UrlRoutingModule (단계 2에서)은 routing handler을 사용하여 ASP.NET이 해당 경로에서 들어오는 요청을 처리하는 데 사용할 http 핸들러를 선택합니다.

the full story here을 찾을 수 있습니다.

+0

전체 기사 링크는 정말 잘 요약되어 있습니다. 대답이없는 부분에 추가하기 위해 ASP.NET 런타임은 루트 Global.asax 파일에서 HttpApplication 인스턴스를 만듭니다. – marcind

+0

감사합니다. marcind - 전 그 질문의 일부를 간과했습니다. –