2

Web API (VS 2012에서 C# 사용)를 처음 사용하고 AngularJS 프런트 엔드에 더 의미있는 오류를 반환하는 작업을 돕기 위해 시도했지만 실제로 있을지 잘 모르겠습니다. 단순히 오류를 잡기 내가 완전히 이해하지CreateErrorResponse를 반환하거나 새로운 HttpResponseException을 throw합니다.

return Request.CreateErrorResponse(..

throw new HttpResponseException(Request.CreateErrorResponse(...

대 말에 관해서 바람직한 방법 프로의 양론의 또는 u 응답 오류를 반환합니다.

더 많은 배경에서 우리는 Excel 파일을 업로드하는 중이고 구문 분석시 오류를 유발하는 다양한 사용 사례가 있습니다. 난 모호한 "예외"보다는 오히려 오류의 원인을 밝히는 오류 메시지를 비동기 적으로 반환하고 싶습니다.

그래서 나는 오류가 더 목적이 의미를 줄 수

try 
{ 
//stuff 
} 
catch (FormatException e) 
{ 
    return Request.CreateErrorResponse(HttpStatusCode.Conflict, "issue 1"); 
} 
catch (FileFormatException e) 
{ 
    return Request.CreateErrorResponse(HttpStatusCode.Conflict, "issue 2"); 
} 
catch (Exception ex) 
{ 
    return Request.CreateErrorResponse(HttpStatusCode.Conflict, "issue 3"); 
} 

등 뭔가 노력하고 있습니다. 난 그냥 내가 그냥

.error(function (data) { 
     $scope.uploadFailed = true;  //shows the message span 
     $scope.uploadMsg = data["Message"].trim(); 
}); 

이 경우에 저를 용서 그 오류를 읽고 오전 Request.CreateErrorResponse을 "반환", 또는 프런트 엔드에 throw new HttpResponseException(Request.CreateErrorResponse(...

같은 예외를 "던지는"해야하는지 여부에 그냥 혼란 스러워요 이것은 혼란스럽고, 나는이 시나리오에 대해 오류를 반환하는 방법과 이유를 결정하는 중입니다. - 날짜이 대답으로

답변

0

나는 기본적으로 오류 응답을 반환하는 당신이 더 나은 성능의 관점에서 How much more expensive is an Exception than a return value?

, 요구했다 ... 아무도 놀랍군요 없습니다.

일반적으로 가능한 경우 예외를 던지지 않는 것이 좋습니다. 특히 예외가 예상되는 경우에는 예외를 두는 것이 좋습니다. 예외는 예외적 인 경우 여야합니다.

엄밀히 말하자면 클라이언트 오류 (4XX)를 사용하는 경우 예기치 때문에 예외가 아니며 예를 들어 적절할 때 TryParse을 입력 한 다음 400 BadRequest을 반환 할 수 있습니다.

반대로 응용 프로그램에 많은 계층이 있으며 나쁜 인수가 예상치 못한 곳에 도착하면 예외가 발생할 수 있으며 이러한 경우에는 500 오류 응답으로 catch하고 감쌀 수 있습니다. 4XX와는 달리 기대하지 않았기 때문에 InternalServerError이됩니다.

관련 문제