[asp.net-mvc] asp.net 코어 미들웨어 대 필터

asp.net 코어 미들웨어에 대해 읽은 후, 필터를 사용해야 할 때와 같은 목표를 달성하는 것처럼 보이는 미들웨어를 사용해야하는 때를 혼동합니다. fitler 대신 미들웨어를 사용해야하는 경우는 언제입니까?



답변

채널 9에 이에 대한 비디오가 있습니다. ASP.NET Monsters # 91 : Middleware vs. Filters . 비디오 요약 :

요청 실행이 시작되고 미들웨어와 다른 미들웨어가 있습니다. “인형 내부의 러시아 인형”이라고 생각하면 결국 라우팅 미들웨어가 시작되고 요청이 MVC pipline으로 들어갑니다.
여기에 이미지 설명 입력
따라서 MVC 컨텍스트가 필요하지 않은 경우 (헤더에 대한 일부 사전 라우팅 메커니즘 등의 응답과 같이 흐름 및 실행에 대해 우려한다고 가정 해 보겠습니다) 미들웨어 를 사용하십시오 .
그러나 MVC의 컨텍스트가 필요하고 작업에 대해 작동하려면 필터 를 사용하십시오 .


답변

미들웨어는 ASP.NET Core 수준에서 작동하며 애플리케이션에 들어오는 모든 단일 요청에 대해 작동 할 수 있습니다.

반면에 MVC 필터는 MVC에 들어오는 요청에 대해서만 실행됩니다.

예를 들어 모든 요청이 HTTPS를 통해 이루어져야하도록 강제하려면 미들웨어를 사용해야합니다. 그렇게하는 MVC 필터를 만들면 사용자는 여전히 HTTP를 통해 정적 파일을 요청할 수 있습니다.

그러나 반면에 MVC 컨트롤러에서 요청 기간을 기록하는 것은 절대적으로 액션 필터가 될 수 있습니다.


답변

의 실행은 middlewareMVC 컨텍스트가 파이프 라인에서 사용 가능해지기 전에 발생합니다. 즉, 예를 들어 ActionFilter의 경우 또는에 대한 middleware액세스 권한이 없습니다 . 액세스 권한이있는 것은 요청 및 응답에 대한 작업을 수행 할 수있는입니다. 모델 바인딩이 아직 발생하지 않았기 때문에 미들웨어를 사용하는 것은 유효성 검사 기능을 실행하거나 값을 수정하는 데 적합하지 않습니다. 또한 호출되는 컨트롤러 또는 작업에 관계없이 모든 요청에서 실행됩니다.ActionExecutingContextActionExecutedContextHttpContextMiddleware

반면에는 filters시작시 전역 적으로 필터를 등록하지 않는 한 지정된 작업 및 컨트롤러에서만 실행됩니다. 컨텍스트에 대한 전체 액세스 권한이 있으므로 컨트롤러 및 작업 자체에 액세스 할 수도 있습니다.

출처 및 예 : dotnetcultist.com


답변