MVC 프레임 워크-액션 필터

ASP.NET MVC에서 컨트롤러는 동작 메서드를 정의하고 이러한 동작 메서드는 일반적으로 단추 또는 링크 클릭 등과 같은 UI 컨트롤과 일대일 관계를 갖습니다. 예를 들어 이전 예제 중 하나 인 UserController 클래스는 UserAdd, UserDelete 등의 메소드를 포함합니다.

그러나 여러 번 특정 작업 전후에 몇 가지 작업을 수행하고 싶습니다. 이 기능을 구현하기 위해 ASP.NET MVC는 컨트롤러의 작업 메서드에 사전 및 사후 작업 동작을 추가하는 기능을 제공합니다.

필터 유형

ASP.NET MVC 프레임 워크는 다음 동작 필터를 지원합니다.

  • Action Filters− 액션 필터는 컨트롤러 액션이 실행되기 전과 후에 실행되는 로직을 구현하는 데 사용됩니다. 이 장에서는 액션 필터에 대해 자세히 살펴 보겠습니다.

  • Authorization Filters − 권한 부여 필터는 컨트롤러 작업에 대한 인증 및 권한 부여를 구현하는 데 사용됩니다.

  • Result Filters− 결과 필터는보기 결과가 실행되기 전후에 실행되는 로직을 포함합니다. 예를 들어, 뷰가 브라우저에 렌더링되기 직전에 뷰 결과를 수정할 수 있습니다.

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

작업 필터는 추가 데이터 처리를 수행하거나 반환 값을 조작하거나 작업 실행을 취소하거나 런타임에보기 구조를 수정하는 데 가장 일반적으로 사용되는 필터 중 하나입니다.

액션 필터

동작 필터는 동작이 실행되는 방식을 수정하기 위해 컨트롤러 섹션 또는 전체 컨트롤러에 적용 할 수있는 추가 속성입니다. 이러한 특성은 클래스, 메서드, 속성 및 필드에 연결할 수있는 System.Attribute에서 파생 된 특수 .NET 클래스입니다.

ASP.NET MVC는 다음과 같은 동작 필터를 제공합니다.

  • Output Cache −이 동작 필터는 지정된 시간 동안 컨트롤러 동작의 출력을 캐시합니다.

  • Handle Error −이 액션 필터는 컨트롤러 액션이 실행될 때 발생하는 오류를 처리합니다.

  • Authorize −이 동작 필터를 사용하면 특정 사용자 또는 역할에 대한 액세스를 제한 할 수 있습니다.

이제 예제 컨트롤러 ActionFilterDemoController에 이러한 필터를 적용하는 코드 예제를 볼 수 있습니다. (ActionFilterDemoController는 예제로 사용됩니다. 이러한 필터는 모든 컨트롤러에서 사용할 수 있습니다.)

출력 캐시

Example − 10 초 동안 캐시 할 반환 값을 지정합니다.

public class ActionFilterDemoController : Controller { 
   [HttpGet] 
   OutputCache(Duration = 10)] 
   
   public string Index() { 
      return DateTime.Now.ToString("T");  
   } 
}

오류 처리

Example − 컨트롤러에 의해 오류가 발생하면 응용 프로그램을 사용자 지정 오류 페이지로 리디렉션합니다.

[HandleError] 
public class ActionFilterDemoController : Controller { 
   
   public ActionResult Index() { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult About() { 
      return View(); 
   } 
}

위의 코드를 사용하면 작업 실행 중에 오류가 발생하면 Views 폴더에서 Error라는 뷰를 찾아 해당 페이지를 사용자에게 렌더링합니다.

승인

Example − 승인 된 사용자 만 응용 프로그램에 로그인 할 수 있습니다.

public class ActionFilterDemoController: Controller { 
   [Authorize] 
   
   public ActionResult Index() { 
      ViewBag.Message = "This can be viewed only by authenticated users only"; 
      return View(); 
   }  
   
   [Authorize(Roles="admin")] 
   public ActionResult AdminIndex() { 
      ViewBag.Message = "This can be viewed only by users in Admin role only"; 
      return View(); 
   } 
}

위의 코드를 사용하여 로그인하지 않고 응용 프로그램에 액세스하려고하면 다음 스크린 샷에 표시된 것과 유사한 오류가 발생합니다.