클래스 정의는 다음과 같습니다.
using System; using System.Web; using System.Web.SessionState; namespace QTJZ { public class Filters : IHttpModule, IRequiresSessionState { public void Dispose() { } public void Init(HttpApplication application) { application.AcquireRequestState += new EventHandler(application_AcquireRequestState); } public void application_AcquireRequestState(object sender, EventArgs e) { HttpApplication application = sender as HttpApplication; HttpRequest request = application.Request; HttpResponse response = application.Response; string url=request.CurrentExecutionFilePath.Trim('/'); string suffix = request.CurrentExecutionFilePathExtension.Trim('.'); if (!url.Equals("Default.htm") && (suffix == "aspx" || suffix == "htm")) { object sessionObj = application.Context.Session == null ? null : application.Session["useID"]; if (sessionObj==null) { response.Redirect("~/Default.htm"); } } } } }
필터링 효과를 얻으려면 Filters 클래스에서 IHttpMoeld 인터페이스를 구현해야 합니다. 하나는 Dispose이고 다른 하나는 Init입니다. Init의 매개변수는 HttpApplication 유형의 인스턴스입니다. 이 인스턴스를 사용하여 일부 이벤트를 등록합니다. 이제 URL이 필터링되었으므로 AcquireRequestState 이벤트가 등록됩니다. 유사한 이벤트는 다음과 같습니다.
리디렉션할 URL을 얻으려면 요청의 CurrentExecutionFilePath 속성을 사용하고 요청된 파일의 접미사를 얻으려면 CurrentExecutionFilePathExtension을 사용할 수 있습니다. 판단할 규칙은 요청에 따라 다릅니다. 여기서 내가 하는 일은 요청 중에 세션이 존재하는지 확인하는 것입니다. 세션이 존재하지 않으면 로그인 페이지로 다시 이동합니다. 세션이 사용되므로 페이지를 열 때 예외가 발생합니다. 예외 메시지는 "이 컨텍스트에서는 세션 상태를 사용할 수 없습니다."입니다. IRequiresSessionState 인터페이스를 구현한 후에는 예외가 발생하지 않습니다.
또한 구성 파일 Web.config의
<httpModules> <add name="filters" type="QTJZ.Filters"/> </httpModules>
type 속성은 위의 필터 클래스
ASP.NET의 URL 필터링 구현 코드와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!