I가 다음과 같은 일반적인 구조를 가진 ASP.NET WebAPI (V2) 컨트롤러 액션 : WebAPI BadRequest 떨어 뜨리 응답 데이터
[HttpPost]
public HttpResponseMessage Post(UserDTO model)
{
try {
// do something
}
catch (Exception ex)
{
var error = new {
errorMessage = ex.Message,
userId = 123,
// some other simple data
};
return Request.CreateResponse(HttpStatusCode.BadRequest, error);
}
return Request.CreateResponse(HttpStatusCode.OK, model);
}
내 지역 개발 서버에서이 작업을 실행
( IIS 익스프레스) 오류가 발생하면 기대 한 JSON 페이로드를 다시 얻습니다.{
config: {...},
data: {
errorMessage: "User invalid",
userId: 123,
...
},
status: 400,
statusText: "Bad Request"
}
나도 같은 코드를 실행
은/원격/프로덕션 서버의 데이터는 (8.5 IIS), 모두 내가 돌아 얻을 :{
config: {...},
data: "Bad Request,
status: 400,
statusText: "Bad Request"
}
data
페이로드가 손실의 사용자 정의/멀리 제거 응답. 이 은 HttpStatusCode.BadRequest
에서 HttpStatusCode.OK
으로 변경 한 것처럼 Request.CreateResponse()
호출에 사용 된 HttpStatusCode
과 관련된으로 표시되며 사용자 정의 데이터 페이로드가 다운로드됩니다. I 테스트 같이
Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
복귀를 변경하려고하지만 결과는 동일, 즉 데이터가 간단한
"잘못된 요청" 문자열로 반환이었다.
참조를 위해 API는 AngularJS $http.post()
호출에 의해 호출됩니다.
HttpStatusCode
의 변경으로 인해 프로덕션 서버에서 응답 페이로드가 변경되는 이유는 무엇입니까? 어떤 도움이라도 대단히 감사 할 것입니다.
이 멍청한 질문에 대해 사과드립니다.하지만이 질문에 대한 답변은 확실합니까? IIS와 Express에는 다른 프로세스 스택이 있으므로 예외는 다른 곳에서있을 수 있습니다. IIS에서 실패한 요청 추적을 사용하여 예외 지점을 찾을 수 있습니다. –
바보 인 경우 방금 똑같은 질문을했습니다 :-) 예, 생각 합니다만 ... 관련이있는 것 같습니다. 프로덕션 웹 사이트에서 사용 된 오류 처리에서 를 제거하면 데이터가 올바르게 반환됩니다. 그래서, 이것은 혼합 된 MVC/WebAPI 응용 프로그램으로 다음 내 질문에 있어야합니다 WebAPI 호출에 대한 기본 오류 처리기를 호출하는 것을 피하는 것 같아요? –
Neilski