웹 API가 있습니다. MVC 4 웹 API 프레임 워크를 사용하고 있습니다. 예외가있는 경우 현재 새 HttpResponseException을 던지고 있습니다. 예 :웹 API에서 사용자 정의 오류 객체 반환
if (!Int32.TryParse(id, out userId))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid id"));
이 단순히 {"message":"Invalid id"}
내가 더 상세한 객체를 반환하여 예외이 응답을 통해 더 관리 권한을 획득하고자하는 클라이언트에 개체를 반환합니다. 예 :
{
"status":-1,
"substatus":3,
"message":"Could not find user"
}
어떻게하면됩니까? 내 오류 개체를 serialize하고 응답 메시지에서 설정하는 가장 좋은 방법은 무엇입니까?
나는 또한 ModelStateDictionary
에 비트를 검토 한 결과는 "해킹"의 비트와 함께 온,하지만 여전히 깨끗한 출력이 아니다 :
var msd = new ModelStateDictionary();
msd.AddModelError("status", "-1");
msd.AddModelError("substatus", "3");
msd.AddModelError("message", "invalid stuff");
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, msd));
편집
이처럼 보인다 맞춤 HttpError
이 필요합니다.
비즈니스 계층에 대한 사용자 정의 예외 클래스를 만듭니다 :
이var error = new HttpError("invalid stuff") {{"status", -1}, {"substatus", 3}};
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));
왜 Message 속성을 숨기고 있습니까? 기본 ctor를 호출하고 메시지를 그렇게 전달하는 것이 더 안전하지 않습니까? – Andy