1

모든 예외를 가로 채려고하지만 코드가 실행되지 않습니다. 나는 이걸 GlobalFilters에 넣으려고 시도했고 또한 직접 내 방식에 적용했다.ASP NET MVC OnException이 호출되지 않습니다. ApiController

내 속성 :

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
    public class HandleExceptionAttribute : HandleErrorAttribute { 
     private ILog log = LogManager.GetLogger(typeof(HandleExceptionAttribute)); 

     public override void OnException(ExceptionContext filterContext) { 
      log.Info("inside on exception"); // this never appears 

     } 
    } 

내 클래스 : 0으로

public class Tester { 
     [HandleException] 
     public void Except() { 
      var asd = 0; 
      var qwe = 1/asd;    
     } 
    } 

나누 나에게 예외를주고, 내 디버거 나는 계속하지만, 아무것도 로그 파일에 기록되지, 그것을 잡는다.

로거가 작동합니다. 다른 로그가 파일에 나타납니다. 디버깅을 사용하지 않더라도 로그 파일을 읽지 않으므로 디버거 오류가 아닙니다.

IIS Express에서 실행 중입니다. Windows 7

편집 :

컨트롤러로 이동했습니다. 여전히 작동하지 않음

public class UserController : ApiController { 
     private ILog log = LogManager.GetLogger(typeof(UserController)); 

     [HandleException] 
     [CheckModelForNull] 
     [ValidateModelState] 
     public object Post([FromBody]User user) {  
      var asd = 0; 
      var qwe = 1/asd; 

      return new HttpStatusCodeResult(HttpStatusCode.OK); 
     } 
    } 
+2

필터 만 속성 pply 액션 & 컨트롤러. 당신은 AoP를 찾고 있을지도 모릅니다. – SLaks

+0

질문과 대답을 위해 +1 – SLaks

+0

@SLaks 내 편집을 참조하십시오. – Jaanus

답변

3

ApiControllers이 HandleErrorAttribute

ExceptionFilterAttribute을 사용해야 사용하지 않는 : 당신은 다른 클래스 나 코드가 작업을 들어가기 전에, 당신이 Application_Error 방법 Global.asax에 덮어 쓰기해야 할 일이 무엇인가의 오류를 캡처하려면

public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute 
    { 
     public override void OnException(HttpActionExecutedContext context) 
     { 
      log.error("ERROR",context.Exception) 
     } 
    } 

http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling

3

설명에서 언급했듯이 필터 속성은 컨트롤러의 작업에만 적용됩니다.

protected void Application_Error(object sender, EventArgs e) 
{ 
    log.Info("inside on exception"); 
} 
+0

컨트롤러로 이동했지만 여전히 작동하지 않습니다. 내 편집을 참조하십시오. – Jaanus

+0

global.asax (Application_Start 메서드)에 필터를 등록 했습니까? – jandic

+0

컨트롤러 끝점 – Jaanus