방법: 캐시된 페이지의 유효성 검사

Visual Studio 2010

업데이트: 2007년 11월

사용자가 캐시된 페이지를 요청하면 ASP.NET에서는 페이지에 정의된 캐시 정책을 기반으로 캐시된 출력이 유효한지 여부를 확인합니다. 캐시된 출력이 유효한 경우에는 이 출력이 클라이언트에 전달되고 페이지가 다시 처리되지 않습니다. 그러나 ASP.NET에서는 유효성 검사 콜백을 사용하여 유효성 검사를 수행하는 동안 코드를 실행할 수 있는 기능을 제공하므로 페이지의 유효성을 검사하는 사용자 지정 논리를 작성할 수 있습니다. 유효성 검사 콜백을 사용하면 캐시 종속성을 사용하는 일반 프로세스 외부의 캐시된 페이지를 무효화할 수 있습니다.

캐시된 페이지의 유효성을 프로그래밍 방식으로 검사하려면

  1. HttpCacheValidateHandler 형식의 이벤트 처리기를 정의하고 캐시된 페이지 응답의 유효성을 검사하는 코드를 포함합니다.

    유효성 검사 처리기는 다음과 같은 HttpValidationStatus 값 중 하나를 반환해야 합니다.

    • Invalid   캐시된 페이지가 유효하지 않아 캐시에서 제거되고 요청이 캐시 누락으로 처리됨을 나타냅니다.

    • IgnoreThisRequest   요청이 캐시 누락으로 처리됩니다. 따라서 페이지는 다시 처리되지만 캐시된 페이지는 무효화되지 않습니다.

    • Valid   캐시된 페이지가 유효함을 나타냅니다.

    다음 코드 예제에서는 쿼리 문자열 변수 status에 "invalid" 또는 "ignore" 값이 포함되어 있는지 확인하는 유효성 검사 처리기(ValidateCacheOutput)를 보여 줍니다. 상태 값이 "invalid"인 경우에는 메서드에서 Invalid를 반환하고 페이지가 캐시에서 무효화됩니다. 상태 값이 "ignore"인 경우에는 메서드에서 IgnoreThisRequest를 반환하고 페이지가 캐시에 남아 있지만 이 요청에 대해 새 응답이 생성됩니다.

    public static void ValidateCacheOutput(HttpContext context, Object data,
            ref HttpValidationStatus status)
    {
        if (context.Request.QueryString["Status"] != null)
        {
            string pageStatus = context.Request.QueryString["Status"];
    
            if (pageStatus == "invalid")
                status = HttpValidationStatus.Invalid;
            else if (pageStatus == "ignore")
                status = HttpValidationStatus.IgnoreThisRequest;
            else
                status = HttpValidationStatus.Valid;
        }
        else
            status = HttpValidationStatus.Valid;
    }
    

    Public Shared Sub ValidatePage(ByVal context As HttpContext, _
            ByVal data As [Object], ByRef status As HttpValidationStatus)
        If Not (context.Request.QueryString("Status") Is Nothing) Then
            Dim pageStatus As String = context.Request.QueryString("Status")
    
            If pageStatus = "invalid" Then
                status = HttpValidationStatus.Invalid
            ElseIf pageStatus = "ignore" Then
                status = HttpValidationStatus.IgnoreThisRequest
            Else
                status = HttpValidationStatus.Valid
            End If
       Else
           status = HttpValidationStatus.Valid
       End If
    End Sub
    
  2. 페이지 수명 주기 이벤트(예: 페이지의 Load 이벤트)에서 AddValidationCallback 메서드를 호출하고 1단계에서 정의한 이벤트 처리기를 첫 번째 인수로 전달합니다.

    다음 코드 예제에서는 ValidateCacheOutput 메서드를 유효성 검사 처리기로 설정합니다.

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.AddValidationCallback(
            new HttpCacheValidateHandler(ValidateCacheOutput),
            null);
    }
    

    Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    
        Response.Cache.AddValidationCallback( _
            New HttpCacheValidateHandler(AddressOf ValidatePage), Nothing)
    End Sub
    
표시: