>  기사  >  백엔드 개발  >  ASP.NET의 URL 필터링 구현 코드

ASP.NET의 URL 필터링 구현 코드

高洛峰
高洛峰원래의
2017-01-21 15:11:562244검색

클래스 정의는 다음과 같습니다.

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 이벤트가 등록됩니다. 유사한 이벤트는 다음과 같습니다.

ASP.NET의 URL 필터링 구현 코드

리디렉션할 URL을 얻으려면 요청의 CurrentExecutionFilePath 속성을 사용하고 요청된 파일의 접미사를 얻으려면 CurrentExecutionFilePathExtension을 사용할 수 있습니다. 판단할 규칙은 요청에 따라 다릅니다. 여기서 내가 하는 일은 요청 중에 세션이 존재하는지 확인하는 것입니다. 세션이 존재하지 않으면 로그인 페이지로 다시 이동합니다. 세션이 사용되므로 페이지를 열 때 예외가 발생합니다. 예외 메시지는 "이 컨텍스트에서는 세션 상태를 사용할 수 없습니다."입니다. IRequiresSessionState 인터페이스를 구현한 후에는 예외가 발생하지 않습니다.

또한 구성 파일 Web.config의 노드 아래에 다음 코드를 추가해야 합니다.

<httpModules> 
<add name="filters" type="QTJZ.Filters"/> 
</httpModules>

type 속성은 위의 필터 클래스

ASP.NET의 URL 필터링 구현 코드와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.