2013-08-11 1 views
2

간단한 사용자 등록을 처리하는 MSMVC API를 작성하고 있습니다. API에서 컨트롤러에 전달 된 데이터가 유효하지 않은 경우 예외를 throw하려고합니다.HttpResponseException을 던지면 항상 StatusCode : 500 응답이 클라이언트에 발생합니다.

public XmlResult RegisterByEmailAddress(UserModel model) 
    { 
     var errorResponse = new HttpResponseMessage(HttpStatusCode.BadRequest) 
     { 
      Content = new StringContent("Problem"), 
      ReasonPhrase = "Problem" 
     }; 
     throw new HttpResponseException(errorResponse); 
    } 

예외적으로 설정 한 것에 관계없이 클라이언트 응답에서 500 오류 만 표시됩니다. Visual Studio 2012를 사용하고 로컬 IIS 서버에서 디버그 모드로 API를 실행하고 있습니다.

크롬 데브에서 볼 수 있듯이 응답의 실제 내용은 다음과 같습니다

방법 :이 오기 상태 : 500 내부 서버 오류, 유형 text/html과는

사람이 어떤 생각을 가지고 있습니까 어떤 문제가 수도 있다?

+0

의 모습 거기에있는 코드는 괜찮습니다. (예외를 위해 'errorResponse' 객체를 전달해야합니다.) 디버그에서 코드가 충돌합니까? 아니면 컨트롤러 코드를 더 게시 할 수 있습니까? 그리고/또는 응답에서 더 많은 정보가 있습니까? –

+0

이 오류는 ExceptionFilterAttribute에서 처리됩니까? Re에 오류를 추가 한 후 sponseMessage 왜 당신은 오류를 다시 던지고 있습니까? – Nilesh

+0

@ SimonC - 전체 컨트롤러를 표시하도록 코드를 업데이트했습니다. 기본적으로 테스트 할 때마다 예외가 발생합니다. –

답변

3

당신의 컨트롤러가 틀린 기본 클래스를 상속 받았다는 당신의 대답과 몇 가지 테스트를 기반으로 생각합니다. 나머지 컨트롤러를 게시 한 경우보기가 더 쉬울 수도 있습니다. 당신이 ApiController을 상속하고 생성자에서 HttpException을 던지는 경우

모든 API 컨트롤러는 ApiController

MyController : ApiController 
+0

네, 그게 바로 문제입니다. 답은 수락되었습니다. –

0

확장 ExceptionFilterAttribute에서 비슷한 작업을하고 있습니다. 당신이 그렇게 할 수 있는지는 잘 모르지만 현재 사용하고있는 코드를 공유 할 생각은 있습니다. 이것은 단지 샘플입니다. 이 메서드에 추가 할 것이 많으므로.

public override void OnException(HttpActionExecutedContext actionExecutedContext) 
{ 
    var actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; 
    var controllerName = 
     actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName; 
    Logger.LogException(controllerName + ":" + actionName, actionExecutedContext.Exception); 
    actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
             { 
              ReasonPhrase = YourPhrase 
             }; 
} 
0

OK, 잘 많은 시험 후 다음과 같은 작업을 오류 :

throw new HttpException((int)HttpStatusCode.BadRequest, "Invalid password provided to the Api"); 

이 API를 개발 할 때 HttpResponseException을 던지는 것이 좋습니다 (내가 생각하는) 문서에 갈 것 같다.

+0

이것은 갈 방법이 아닐 수 있습니다. 그러나 왜 이것이 잘못되었는지 설명 할 수 없으면 내 자신의 대답을 받아 들일 것입니다. –

0

에서 상속해야 - 당신이 내부 서버 오류 (500)를 얻을 것이다, 당신은 전달에 관계없이 어떤 HttpStatusCode가

관련 문제