2011-07-03 2 views
40

MVC에서어떤 순서로 필터는 asp.net mvc에서 실행됩니다

[HttpPost] 
[Authorize] 
public ActionResult mymethod(){} 

HttpPostMethodSelectorAttribute (아마도 간접적으로)에서 파생되며 Authorize 특성은 ActionFilterAttribute에서 상속합니다.

제 질문은 : 그들은 MVC 요청 파이프 라인에서 어떤 순서로 실행됩니까? MVC 소스 코드에서 검색을 시도했지만 관련 코드 비트를 찾지 못했습니다.

+0

소스에서 실제 순서에 의해 영향을받을 수있는 리플렉션 중에 반환되는 순서를 가정합니다. –

+0

@Hasan bhai 먼저 HttpPost가 actionMethodSelector (해당 메서드 isValidForRequest가 호출 됨) 특성이고 Authorize가 actionFilter 특성 (onActionExecuting 또는 onActionExecuted가 호출 됨)이 서로 다른 시간에 호출되어야한다고 생각합니다. 아마도 HttpPost는 다른 필터이고 다른 책임이 있기 때문에 Authorize 전에 호출되어야합니다. –

+0

내 가정이 틀린 것처럼 보입니다. Eranga의 답변에 따르면 필터에는 순서를 지정하는 메커니즘이 있습니다. 그러나 HttpPost는 필터가 아니기 때문에 나타납니다. 그것은 다른 어떤 것보다 먼저 실행함으로써 특별한 처리를 할 수 있습니다. 다시 한번 가정합니다. –

답변

60

필터는 다음과 같은 순서로 실행

  1. 인증 필터
  2. 액션 필터
  3. 응답 필터
  4. 예외 필터

예를 들어, 권한 부여 필터를 먼저 실행 및 예외 필터를 마지막으로 실행하십시오. 각 필터 유형 내에서 Order 값은 실행 순서를 지정합니다. 각 필터 유형 및 순서 내에서 Scope 열거 형 값은 필터의 순서를 지정합니다. MSDN에서 추출

  1. 먼저
  2. 글로벌
  3. 컨트롤러
  4. 액션
  5. 마지막

:이 열거 형은 (그들이이 실행되는 순서대로) 다음 필터 범위의 값을 정의

+1

HttpPost는 위에서 언급 한 필터 중 하나가 아니므로 MehodSelectorAttribute –

+2

예 복수의 후보가있을 경우 작업 방법을 선택하는 데 사용됩니다. 마커 속성입니다. 필터가 실행되기 전에 사용됩니다 – Eranga

+1

자세한 내용은 http://zahidadeel.blogspot.com/2011/07/ajaxonly-attribute-actionfilter-vs.html을 방문하십시오 –

19

저장하려면 당신이 약간의 시간이 당신이 순서를 설정하는 방법이다 : 당신은 0, 1, 2, 등 ...

그것은 주목해야한다 할 수 있도록 인덱스는 0을 기반으로

[MyCustomContextFilter(Order=1)] 

그냥 필터가 기본 클래스에 있기 때문에 MVC에 먼저 적용하도록 지시하지 않습니다.

+2

또한 주문이 지정되지 않은 필터는 주문이있는 필터보다 먼저 실행됩니다. 필터 유형 컨텍스트 (권한 부여, 작업 등)에 적용됩니다. –

+0

NB. 예외 필터는 역순으로 실행됩니다! (네 진짜로 요 :/) – Haohmaru

관련 문제