ASP.NET Core MVC 필터 사용법 소개

6339 단어 ASP.NETCoreMVC필터
필터 의 역할 은 Action 방법 이 실행 되 기 전이 나 실 행 된 후에 가공 처 리 를 하 는 것 입 니 다.필 터 를 사용 하면 Action 방법의 중복 코드 를 피 할 수 있 습 니 다.예 를 들 어 이상 필 터 를 사용 하여 이상 처 리 된 코드 를 합 칠 수 있 습 니 다.
필 터 는 어떻게 작 동 합 니까?
필 터 는 MVC Action 호출 파이프 에서 실행 되 며,때로는 필터 파이프 라 고도 부른다.MVC 에서 실행 할 Action 방법 을 선택 한 후에 야 필터 파 이 프 를 실행 할 수 있 습 니 다.

이루어지다
필 터 는 동기 화 와 비동기 두 가지 서로 다른 인터페이스 정 의 를 동시에 지원 합 니 다.실행 중인 작업 형식 에 따라 동기 화 또는 비동기 화 를 선택 할 수 있 습 니 다.
동기 화 필 터 는 OnStageExecuting 과 OnStageExecuted 방법 을 정의 합 니 다.파이프 의 특정 단계 전과 그 후에 코드 를 실행 합 니 다.예 를 들 어IActionFilter필 터 는 Action 방법 을 호출 하기 전에 호출OnActionExecuting하고 Action 방법 이 돌아 온 후에 호출OnActionExecuted합 니 다.

 public class SampleActionFilter : IActionFilter
 {
  public void OnActionExecuting(ActionExecutingContext context)
  {
   // do something before the action executes
  }

  public void OnActionExecuted(ActionExecutedContext context)
  {
   // do something after the action executes
  }
 }

비동기 필 터 는 OnStageExecution Async 방법 을 정의 합 니 다.이 방법 은 FilterTypeExecution Delegate 의 의뢰 를 제공 합 니 다.이 의뢰 를 호출 할 때 구체 적 인 파이프 단계 의 작업 을 수행 합 니 다.예 를 들 어ActionExecutionDelegateAction 방법 을 호출 하 는 데 사 용 됩 니 다.코드 를 호출 하기 전과 그 후에 실행 할 수 있 습 니 다.

 public class SampleAsyncActionFilter : IAsyncActionFilter
 {
  public async Task OnActionExecutionAsync(
   ActionExecutingContext context,
   ActionExecutionDelegate next)
  {
   // do something before the action executes
   await next();
   // do something after the action executes
  }
 }
하나의 클래스 에서 여러 개의 필터 인 터 페 이 스 를 실현 할 수 있 습 니 다.예 를 들 어ActionFilterAttribute추상 류 는 IAction Filter 와 IResultFilter,그리고 이들 과 대응 하 는 비동기 인 터 페 이 스 를 실현 했다.
제시 하 다.
두 개의 필터 인 터 페 이 스 를 동시에 실현 할 필요 가 없습니다.동기 화 되 거나 비동기 화 될 필요 가 없습니다.프레임 워 크 는 먼저 필터 가 비동기 인 터 페 이 스 를 실 현 했 는 지 확인 하고,만약 그렇다면 비동기 방법 을 직접 실행 합 니 다.그렇지 않 으 면 동기 화 인터페이스 방법 을 실행 할 것 이다.한 종류 에서 두 개의 인 터 페 이 스 를 동시에 실현 하면 비동기 방법 만 사용 할 수 있다.Action FilterAttribute 와 같은 추상 적 인 클래스 를 사용 할 때 필 터 를 덮어 쓰 는 동기 화 방법 이나 비동기 방법 만 사용 하 십시오.
필터 종류
ASP.NET Core 는 다음 과 같은 다섯 가지 유형의 필터 가 있 습 니 다.모든 필터 유형 은 필터 파이프 에서 단계별 로 실 행 됩 니 다.
1.Authorization Filter
인증 필 터 는 필터 파이프 에서 첫 번 째 로 실 행 됩 니 다.현재 요청 의 합 법성 을 검증 하 는 데 사 용 됩 니 다.합 법 적 이지 않 은 파 이 프 는 바로 건 너 뜁 니 다.대부분의 필 터 는 사전 단계 방법 과 사후 단계 방법 을 지원 하지 않 는 Before 방법 만 있 습 니 다.인증 필터 에 이상 을 던 지지 마 십시오.이상 을 처리 할 코드 가 없 기 때 문 입 니 다.(이상 필 터 는 처리 하지 않 습 니 다)
2.Resource Filter
자원 필 터 는 두 번 째 로 실 행 됩 니 다.Authorization Filter 이후 Model Binding 전에 실 행 됩 니 다.성능 에 있어 서 자원 필 터 는 캐 시 를 실현 하거나 필터 파 이 프 를 차단 하 는 것 이 특히 중요 하 다.
3.Action Filter
사용률 이 가장 높 은 필 터 는 Acioin 방법 을 호출 하기 전과 그 후에 코드 를 실행 합 니 다.리 소스 필터 와 유사 하지만 모델 바 인 딩 은 이후 에 실 행 됩 니 다.
4.Exception Filter
프로그램 에 이상 처리 정책 을 실행 하 는 데 사용 합 니 다.
5.Result Filter
Action 실행 이 완료 되면 마지막 으로 필 터 를 실행 합 니 다.Action Result 결과 출력 정책 을 처리 하 는 데 사 용 됩 니 다.
필터 실행 순서
ASP.NET Core 의 모든 요청 은 등 록 된 Middleware 를 거 쳐 야 필 터 를 실행 할 수 있 습 니 다.같은 유형의 필 터 는 선진 적 인 방식 으로 실 행 됩 니 다.

S 색 화살 표 는 정상 적 인 r 프로 세 스 입 니 다.
회색 화살 표 는 이상 처리 프로 세 스 입 니 다.
필터 의 역할 영역 과 실행 순서
필 터 는 세 가지 서로 다른 등급 의 역할 영역 을 가지 고 있다.Attribute 를 통 해 지정 한 컨트롤 러 나 Action 방법 에 필 터 를 등록 할 수 있 습 니 다.Startup 클래스 의 Configure Services 방법 에서 필 터 를 MvcOptions.Filters 의 집합 에 전역 필터 로 등록 할 수 있 습 니 다(모든 컨트롤 러 와 Action 방법 에 유효 합 니 다).

 public class Startup
 {
  public void ConfigureServices(IServiceCollection services)
  {
   services.AddMvc(options =>
   {
    options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader", 
     "Result filter added to MvcOptions.Filters")); // an instance
    options.Filters.Add(typeof(SampleActionFilter)); // by type
    options.Filters.Add(new SampleGlobalActionFilter()); // an instance
   });

   services.AddScoped<AddHeaderFilterWithDi>();
  }
 }

예시
기본 실행 순서
파이프 의 한 단계 에 여러 개의 필터 가 존재 할 때 필터 가 실행 하 는 기본 순 서 는 역할 영역 에서 확 정 됩 니 다.전역 필 터 는 컨트롤 러 필터 보다 우선 하고 컨트롤 러 필 터 는 Action 방법 필터 보다 우선 합 니 다.
다음 예 는 동기 화 Action 필터 호출 순서 입 니 다.
번호
필터 역할 영역
필터 방법
1
Global
OnActionExecuting
2
Controller
OnActionExecuting
3
Method
OnActionExecuting
4
Method
OnActionExecuted
5
Controller
OnActionExecuted
6
Global
OnActionExecuted
제시 하 다.
모든 컨트롤 러 의 기본 컨트롤 러 는 OnAction Executing 과 OnAction Executed 방법 을 포함 합 니 다.그 중에서 OnActionExecuting 은 모든 필터 전에 호출 되 고 OnActionExecuted 는 모든 필터 후에 호출 됩 니 다.
기본 실행 순서 덮어 쓰기
IOrdered Filter 인 터 페 이 스 를 통 해 기본 실행 순 서 를 덮어 쓸 수 있 습 니 다.이 인 터 페 이 스 는 Order 속성 이 우선 순 위 를 표시 하여 실행 순 서 를 확인 합 니 다.낮은 Order 값 을 가 진 필 터 는 Order 값 이 높 은 필 터 를 가지 기 전에 선행 방법 을 실행 합 니 다.낮은 Order 값 을 가 진 필 터 는 Order 값 이 높 은 필 터 를 가 진 후에 설치 방법 을 실행 합 니 다.
구조 함수 매개 변 수 를 사용 하여 Order 속성 을 설정 할 수 있 습 니 다:

[MyFilter(Name = "Controller Level Attribute", Order=1)]
상기 예제 에서 Action 필터 의 Order 를 1 로 설정 하면 컨트롤 러 와 전역 필터 의 Order 속성 을 각각 2 와 3 으로 설정 하면 실행 순 서 는 기본 값 과 반대 됩 니 다.
번호
필터 역할 영역
Order 속성
필터 방법
1
Method
1
OnActionExecuting
2
Controller
2
OnActionExecuting
3
Global
3
OnActionExecuting
4
Global
3
OnActionExecuted
5
Controller
2
OnActionExecuted
6
Method
1
OnActionExecuted
필터 가 실 행 될 때 Order 속성의 우선 순위 가 역할 영역 보다 높 습 니 다.필 터 는 먼저 Order 속성 에 따라 정렬 한 다음 역할 영역 에 따라 정렬 합 니 다.모든 내 장 된 필 터 는 IOrdered Filter 인 터 페 이 스 를 실현 하고 Order 값 을 기본 값 으로 0 으로 설정 합 니 다.따라서 Order 속성 을 0 이 아 닌 값 으로 설정 하지 않 으 면 역할 필드 의 우선 순위 에 따라 실 행 됩 니 다.
총결산
오늘 우 리 는 필터 에 대한 기본 지식 을 알 게 되 었 습 니 다.다음 블 로그 에서 필 터 를 내장 하고 필터 의 사용,주입 의존,취소 와 절단 등 지식 을 소개 할 것 입 니 다.감사합니다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기