J2EE 웹 개발에는 특정 URL 접근을 가로채서 필터 메소드를 실행할 수 있는 필터 필터가 있는데, 실제 응용 상황에 따라 요청된 코드를 필터에서 수정하고 세션 정보를 판단하여 이를 수행할 수 있습니다. 간단히 말해서 이 필터는 J2EE의 Chain of Responsibility 디자인 패턴을 적용한 것이라고 할 수 있습니다.
그러면 ASP.NET에서 이러한 필터 구조를 정의하고 필터에서 해당 논리 연산을 수행하는 것이 가능합니까? 대답은 '예'입니다. 이 기사에서는 필터를 작성하는 경우와 이를 IIS 웹 애플리케이션으로 구성하는 방법을 설명합니다.
과정 1: 필터 작성 방법
필터 작성은 실제로 필터 클래스를 작성하는 것, 즉 HttpModule 모듈을 작성하는 것입니다. 이 필터는 IHttpModule 기본 클래스를 구현하고 이를 반복해야 합니다. 다음과 같이 Init 메소드를 작성하고 실제 예를 제공합니다.
이것은 PageFilter.cs입니다.
using System; using System.Web; using System.Web.SessionState; using System.Collections.Generic; using System.Collections; using System.Text; using System.IO; public class PageFilter: IHttpModule { public String ModuleName { get { return "PageFilter"; } } //在 Init 方法中注册HttpApplication // 通过委托方式注册事件 public void Init(HttpApplication application) { application.AcquireRequestState += new EventHandler(Application_AcquireRequestState); } private void Application_AcquireRequestState(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; HttpSessionState session = context.Session; HttpRequest request = context.Request; HttpResponse response = context.Response; String contextPath = request.ApplicationPath; } }
"필터"는 "인터셉터"라고도 할 수 있습니다. 전체 HTTP 요청/응답을 가로채는 과정은 전체 요청/응답 과정이 여러 단계로 나누어질 수 있기 때문에 문제가 발생할 것입니다. 즉, 필터가 어떤 특정 단계를 가로채고 싶은지, 위의 Init 함수에서 , 차단하려는 특정 단계를 정의할 수 있습니다. 예를 들어 위의 차단은 요청 세션이 생성되는 단계입니다. AcquireRequestStat는 이 상태를 대표하며 차단 후 해당 처리 기능은 Application_AcquireRequestState이므로 다음과 같이 정의됩니다. Application_AcquireRequestState 메소드에서는 강제 유형 변환을 통해 애플리케이션, 컨텍스트, 세션, 요청 및 응답과 같은 일련의 객체를 얻을 수 있습니다. URL 접속이 합법이며, 현재 접속이 로그인 후의 접속인지 등을 확인하고 있습니다.
게다가, 가로채는 과정 전체가 여러 단계로 구성되어 있는데, 다른 단계는 어떻게 가로채야 할까요? 이는 위와 유사하게 다음 논리에 따라 Init에서 정의하면 됩니다.
application.1단계의 표준 이름 += new EventHandler(이 단계에 해당하는 처리 방법의 이름) 1)
애플리케이션. 2단계의 표준 이름 += new EventHandler(이 2단계에 해당하는 처리 방법 이름); . .
<configuration> <system.web> <httpModules> <add name="pageModule" type="PageFilter"/> </httpModules> </system.web> </configuration>