다음을 통해 공유


작업 필터 이해(VB)

작성자: Microsoft

PDF 다운로드

이 자습서의 목표는 작업 필터를 설명하는 것입니다. 작업 필터는 작업이 실행되는 방식을 수정하는 컨트롤러 작업 또는 전체 컨트롤러에 적용할 수 있는 특성입니다.

작업 필터 이해

이 자습서의 목표는 작업 필터를 설명하는 것입니다. 작업 필터는 작업이 실행되는 방식을 수정하는 컨트롤러 작업 또는 전체 컨트롤러에 적용할 수 있는 특성입니다. ASP.NET MVC 프레임워크에는 다음과 같은 여러 작업 필터가 포함되어 있습니다.

  • OutputCache – 이 작업 필터는 지정된 시간 동안 컨트롤러 작업의 출력을 캐시합니다.
  • HandleError – 이 작업 필터는 컨트롤러 작업이 실행될 때 발생하는 오류를 처리합니다.
  • 권한 부여 – 이 작업 필터를 사용하면 특정 사용자 또는 역할에 대한 액세스를 제한할 수 있습니다.

사용자 고유의 사용자 지정 작업 필터를 만들 수도 있습니다. 예를 들어 사용자 지정 인증 시스템을 구현하기 위해 사용자 지정 작업 필터를 만들 수 있습니다. 또는 컨트롤러 작업에서 반환된 뷰 데이터를 수정하는 작업 필터를 만들 수 있습니다.

이 자습서에서는 처음부터 작업 필터를 빌드하는 방법을 알아봅니다. 작업 처리의 여러 단계를 Visual Studio 출력 창에 기록하는 로그 작업 필터를 만듭니다.

작업 필터 사용

작업 필터는 특성입니다. 개별 컨트롤러 작업 또는 전체 컨트롤러에 대부분의 작업 필터를 적용할 수 있습니다.

예를 들어 목록 1의 데이터 컨트롤러는 현재 시간을 반환하는 라는 Index() 작업을 노출합니다. 이 작업은 작업 필터로 데코레이팅 OutputCache 됩니다. 이 필터를 사용하면 작업에서 반환된 값이 10초 동안 캐시됩니다.

목록 1 – Controllers\DataController.vb

Public Class DataController
     Inherits System.Web.Mvc.Controller

     <OutputCache(Duration:=10)> _
     Function Index()
          Return DateTime.Now.ToString("T")

     End Function

End Class

브라우저의 Index() 주소 표시줄에 URL /Data/Index를 입력하고 새로 고침 단추를 여러 번 눌러 작업을 반복적으로 호출하는 경우 10초 동안 동일한 시간이 표시됩니다. 작업의 출력 Index() 은 10초 동안 캐시됩니다(그림 1 참조).

캐시된 시간

그림 01: 캐시된 시간(전체 크기 이미지를 보려면 클릭)

목록 1에서 단일 작업 필터인 OutputCache 작업 필터가 메서드에 Index() 적용됩니다. 필요한 경우 동일한 작업에 여러 작업 필터를 적용할 수 있습니다. 예를 들어 및 HandleError 작업 필터를 OutputCache 모두 동일한 작업에 적용할 수 있습니다.

목록 1 OutputCache 에서 작업 필터가 작업에 적용 Index() 됩니다. 클래스 자체에 이 특성을 적용할 DataController 수도 있습니다. 이 경우 컨트롤러에서 노출하는 모든 작업에서 반환된 결과는 10초 동안 캐시됩니다.

다양한 유형의 필터

ASP.NET MVC 프레임워크는 네 가지 유형의 필터를 지원합니다.

  1. 권한 부여 필터 – 특성을 구현합니다 IAuthorizationFilter .
  2. 작업 필터 – 특성을 구현합니다 IActionFilter .
  3. 결과 필터 – 특성을 구현합니다 IResultFilter .
  4. 예외 필터 – 특성을 구현합니다 IExceptionFilter .

필터는 위에 나열된 순서대로 실행됩니다. 예를 들어 권한 부여 필터는 작업 필터 및 예외 필터가 항상 다른 모든 유형의 필터 후에 실행되기 전에 항상 실행됩니다.

권한 부여 필터는 컨트롤러 작업에 대한 인증 및 권한 부여를 구현하는 데 사용됩니다. 예를 들어 권한 부여 필터는 권한 부여 필터의 예입니다.

작업 필터에는 컨트롤러 작업이 실행되기 전과 후에 실행되는 논리가 포함됩니다. instance 작업 필터를 사용하여 컨트롤러 작업이 반환하는 보기 데이터를 수정할 수 있습니다.

결과 필터에는 뷰 결과가 실행되기 전과 후에 실행되는 논리가 포함됩니다. 예를 들어 보기가 브라우저에 렌더링되기 직전에 보기 결과를 수정할 수 있습니다.

예외 필터는 마지막으로 실행할 필터 유형입니다. 예외 필터를 사용하여 컨트롤러 작업 또는 컨트롤러 작업 결과에 의해 발생한 오류를 처리할 수 있습니다. 예외 필터를 사용하여 오류를 기록할 수도 있습니다.

각 필터 유형은 특정 순서로 실행됩니다. 동일한 형식의 필터가 실행되는 순서를 제어하려면 필터의 Order 속성을 설정할 수 있습니다.

모든 작업 필터의 기본 클래스는 클래스입니다 System.Web.Mvc.FilterAttribute . 특정 유형의 필터를 구현하려면 기본 Filter 클래스에서 상속하고 하나 이상의 IAuthorizationFilter, IActionFilter, IResultFilter 또는 ExceptionFilter 인터페이스를 구현하는 클래스를 만들어야 합니다.

기본 ActionFilterAttribute 클래스

사용자 지정 작업 필터를 보다 쉽게 구현할 수 있도록 ASP.NET MVC 프레임워크에는 기본 ActionFilterAttribute 클래스가 포함되어 있습니다. 이 클래스는 및 IResultFilter 인터페이스를 IActionFilter 모두 구현하고 클래스에서 Filter 상속합니다.

여기서 용어는 완전히 일치하지 않습니다. 기술적으로 ActionFilterAttribute 클래스에서 상속되는 클래스는 작업 필터와 결과 필터입니다. 그러나 느슨한 의미에서 action 필터라는 단어는 ASP.NET MVC 프레임워크에서 모든 유형의 필터를 참조하는 데 사용됩니다.

기본 ActionFilterAttribute 클래스에는 재정의할 수 있는 다음 메서드가 있습니다.

  • OnActionExecuting – 컨트롤러 작업이 실행되기 전에 이 메서드가 호출됩니다.
  • OnActionExecuted – 컨트롤러 작업이 실행된 후 이 메서드가 호출됩니다.
  • OnResultExecuting – 컨트롤러 작업 결과가 실행되기 전에 이 메서드가 호출됩니다.
  • OnResultExecuted – 컨트롤러 작업 결과가 실행된 후 이 메서드가 호출됩니다.

다음 섹션에서는 이러한 각 메서드를 구현하는 방법을 살펴보겠습니다.

로그 작업 필터 만들기

사용자 지정 작업 필터를 빌드하는 방법을 설명하기 위해 컨트롤러 작업 처리 단계를 Visual Studio 출력 창에 기록하는 사용자 지정 작업 필터를 만듭니다. LogActionFilter 목록 2에 포함되어 있습니다.

목록 2 – ActionFilters\LogActionFilter.vb

Public Class LogActionFilter
     Inherits ActionFilterAttribute

     Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
          Log("OnActionExecuting", filterContext.RouteData)

     End Sub

     Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
          Log("OnActionExecuted", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuting(ByVal filterContext As ResultExecutingContext)
          Log("OnResultExecuting", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
          Log("OnResultExecuted", filterContext.RouteData)
     End Sub

     Private Sub Log(ByVal methodName As String, ByVal routeData As RouteData)
          Dim controllerName = routeData.Values("controller")
          Dim actionName = routeData.Values("action")
          Dim message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName)
          Debug.WriteLine(message, "Action Filter Log")
     End Sub

End Class

목록 2에서 , OnActionExecuting(), OnResultExecuting()OnActionExecuted()OnResultExecuted() 메서드는 모두 메서드를 호출합니다Log(). 메서드의 이름과 현재 경로 데이터가 메서드에 Log() 전달됩니다. 메서드는 Log() Visual Studio 출력 창에 메시지를 씁니다(그림 2 참조).

Visual Studio 출력 창에 쓰기

그림 02: Visual Studio 출력 창에 쓰기(전체 크기 이미지를 보려면 클릭)

목록 3의 홈 컨트롤러는 로그 작업 필터를 전체 컨트롤러 클래스에 적용하는 방법을 보여 줍니다. 홈 컨트롤러에서 노출하는 작업(메서드 또는 About() 메서드)이 호출될 Index() 때마다 작업 처리 단계는 Visual Studio 출력 창에 기록됩니다.

목록 3 – Controllers\HomeController.vb

<LogActionFilter()> _
Public Class HomeController
     Inherits System.Web.Mvc.Controller

     Function Index()
          Return View()
     End Function

     Function About()
          Return View()
     End Function

            End Class

요약

이 자습서에서는 MVC 작업 필터를 ASP.NET 소개했습니다. 권한 부여 필터, 작업 필터, 결과 필터 및 예외 필터의 네 가지 필터 유형에 대해 알아보았습니다. 기본 ActionFilterAttribute 클래스에 대해서도 알아보았습니다.

마지막으로 간단한 작업 필터를 구현하는 방법을 알아보았습니다. 컨트롤러 작업을 처리하는 단계를 Visual Studio 출력 창에 기록하는 로그 작업 필터를 만들었습니다.