이 기사 뒷부분에서 논의되는 주제를 완전히 이해하려면 IIS와 ASP.NET 간의 통신 프로세스를 간략하게 이해해야 합니다. 여기서 설명하는 것은 IIS 6 서버입니다. IIS 5와 IIS 7의 경우 전자는 제거되었다고 할 수 있지만 후자의 "클래식 모드"는 IIS 6과 완전히 동일하며 새로운 "파이프라인 모드"는 실제로 ASP의 일부 개념에 대해 이야기합니다. NET과 IIS의 긴밀한 통합. IIS 6과 ASP.NET을 이해하신다면 IIS 7의 통합 모드에서는 문제가 없을 것이라 믿습니다.
먼저, 요청 수신부터 응답 반환까지 IIS의 전체 프로세스에 대한 몇 가지 주요 단계를 보여주는 간단한 도식 다이어그램을 살펴보겠습니다.
ASP.NET 응용 프로그램에서 URL 재작성을 수행하려는 경우 일반적으로 BeginRequest 이벤트에서 HttpContext의 RewritePath 메서드를 호출하여 요청 위치를 대상 URL로 다시 지정합니다. 예를 들어 이를 달성하기 위해 Global.asax의 Application_BeginRequest 메서드를 재정의할 수 있습니다.
BeginRequest에서 Rewrite가 수행되는 이유는 이 이벤트가 모든 파이프라인 이벤트 중에서 가장 먼저 트리거되기 때문입니다. 이때 위치를 변경한 후 현재 HttpContext의 일부 속성도 그에 따라 변경되었습니다(예: HttpContext.Request.Path). 이러한 방식으로 다음 파이프라인 이벤트의 처리기 논리가 영향을 받습니다. 예를 들어 디렉터리를 기반으로 사용 권한을 결정해야 하는 경우 ASP.NET에서 받은 요청 대신 "위치된" 경로가 사용됩니다. 당연히 가장 "중요한" 변경 사항은 핸들러를 선택하는 것입니다. 예를 들어 위 예에서는 ASP.NET 엔진이 System.Web.UI를 선택하도록 요청을 "CustomerList.aspx" 파일로 재배치합니다. *.aspx에 해당합니다. PageHandlerFactory 클래스가 요청을 처리합니다.
공개 클래스 글로벌 : System.Web .
{
protected void Application_BeginRequest( 객체 전송자, EventArgs e)
{
HttpContext 컨텍스트 = HttpContext .Current;
if (context.Request.Path.Equals( "/Customers" ,
문자열비교 .InvariantCultureIgnoreCase))
{
context.RewritePath( "~/CustomerList.aspx" );
}
}
}
마지막으로 "ASP.NET 파이프라인"과 "웹 양식"이라는 두 가지 개념을 구별해야 합니다. 둘 다 ASP.NET에서 중요한 모델이지만 차이점은 여전히 매우 큽니다.
사실 위 문장에서 '형태'라는 단어는 정확하지 않을 수도 있습니다. Web Forms는 아마도 독립적으로 사용할 수 있는 실행 엔진 및 모델이어야 하며 System.Web.UI.PageHandlerFactory는 이 모델만 사용하기 때문입니다. ASP.NET 응용 프로그램을 작성할 때 필요에 따라 다른 위치에서 이 모델을 사용할 수 있습니다. 예를 들어 " 기술: HTML 생성을 위한 사용자 컨트롤 사용 " 기사에서는 ascx를 일반 처리기의 템플릿으로 사용하여 콘텐츠를 생성합니다.