2014-09-27 6 views
0

예외를 throw하려고 시도 중입니다. HandleException 특성에서 catch하고 클라이언트에 올바르게 반환하려고합니다.예외 처리/예외 유형을 기반으로 한 HTTP 상태 코드

Login() 기능에
[HandleException(Type = typeof(UserNotFoundException), Status = HttpStatusCode.NotFound)] 
[HandleException(Type = typeof(LoginFailedException), Status = HttpStatusCode.Unauthorized)] 
public UserProfile Login(UserCredentials userCred) 

가 나도 UserNotFoundException 또는 LoginFailedException을 던져 : 여기

은 예입니다.

HandleExceptionAttribute은 다음과 같습니다 : 내가 원하는 것은 던져 질 것입니다 예외의 종류를 처리하고 난 HttpStatusCode를 지정하는 속성에 적절하게 처리 할 수있을 것입니다

public class HandleExceptionAttribute : ExceptionFilterAttribute 
{ 
    public Type Type { get; set; } 
    public HttpStatusCode Status { get; set; } 

    public override void OnException(HttpActionExecutedContext context) 
    { 
     var ex = context.Exception; 

     ResponseHelper.CreateException(Status, ex.Message); 
    } 
} 

.

이 코드에서 문제는 항상 맨 위에있는 특성이 호출된다는 것입니다. 따라서 예외가 LoginFailedException 인 경우에도 항상 UserNotFoundException 및 404 코드가 클라이언트에 반환됩니다.

어떻게하면됩니까?

답변

1

OnException 메서드에서 일부 필터링을 수행해야하는 것처럼 보이므로 예외의 인스턴스가 의도 한 예외와 일치하는지 확인하십시오. 핸들.

public override void OnException(HttpActionExecutedContext context) 
{ 
    var ex = context.Exception; 
    if(typeof(ex) == Type)   
     ResponseHelper.CreateException(Status, ex.Message); 
} 
+0

대단히 감사합니다. – Gaui