2009-08-20 2 views
1

내 mvc 응용 프로그램에 전송 된 요청의 실행 시간을 예상하기 위해 log4net을 사용하여 MVC 응용 프로그램의 global.asax EndRequest 이벤트 경과 시간을 기록했습니다. 그러나 리소스 (css, 이미지)를 포함하여 모든 요청에 ​​대해 EndRequest가 호출됩니다. 나는 능력 있고 두 종류의 요청을 구별하는 것을 선호한다.asp.net mvc :이 요청은 라우팅 되었습니까? 아니요?

라우팅 된 요청을 정적 콘텐츠 요청과 분리 할 수있는 방법이 있습니까? 이 후킹 지점을 버리고 코드의 다른 지점에서 실행을해야합니까?

답변

1

일반적으로 ControllerBase 클래스에서 모든 컨트롤러를 파생시킵니다.이 컨트롤러에는 OnActionExecutingOnActionExecuted 메서드 재정의에 필요한 로깅을 삽입합니다.

이렇게하면 내 모든 컨트롤러 작업에 대한 로깅을 넣을 수있는 장소가 하나 늘어났습니다. 모든 컨트롤러에서 내 모든 작업 방법에 일반적으로 쌓여있는 물건을 더 많이 넣을 수 있습니다.

+0

나는 처음에는 이것을하고 싶지 않았지만,이 시점에서 프로젝트의이 시점에서 마찰이 적은 길이다. – samy

+0

가장 쉽고 가장 실용적인 방법으로 원하는 것을 성취 할 수 있습니다 ... 물론 어떤 사람들은 로깅이 방해가된다고 느낄 수도 있습니다. 왜냐하면 이제는 모든 컨트롤러의 일부이기 때문에 액션 속성에 코드를 추가하고 속성 기본 컨트롤러에서 – mookid8000

1

체크 아웃 Phil Haack's Route Debugger을 확인하십시오.

+1

이것은 순수한 금입니다. :) –

+0

내가 Phil Haack의 코드를 따르고 있다면 그가하는 일은 다음과 같습니다. - 경로를 등록합니다. - 모든 경로 처리기를 특정 httphandler를 반환하는 것으로 덮어 씁니다. 그러면 모든 요청에 ​​대해 하드 코드 된 페이지가 반환됩니다. 거기에 로그인 한 실행 시간에 어떻게 연결해야하는지 실제로 알지 못합니다. 내가 할 수있는 일은 다음과 같다. - 시작과 끝 요청을 기록하는 httphandler를 생성한다 - 로깅을 나눠주는 routehandler에 의해 각 route의 routehandler를 대체한다. httphandler 그러나 나는 mookid가 제안한 것을 할 수 있기 때문에 번거롭게할만한 가치가있는 것으로 보인다. 아래 ... 나는 뭔가를 놓친가요? – samy

+0

위의 끔찍한 포맷에 대해 미안하다. 텍스트 영역이 내 브레이크 라인을 먹었다 ... – samy