Tôi có API web Tôi đang làm việc với việc sử dụng khuôn khổ API MVC 4 Web API. Nếu có một ngoại lệ, tôi hiện đang ném một HttpResponseException mới. ví dụ:Trả về các đối tượng lỗi tùy chỉnh trong API Web
if (!Int32.TryParse(id, out userId))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid id"));
này trả về một đối tượng cho khách hàng mà chỉ đơn giản là {"message":"Invalid id"}
Tôi muốn giành quyền kiểm soát hơn nữa trong phản ứng này ngoại lệ bằng cách quay một đối tượng chi tiết hơn. Một cái gì đó như
{
"status":-1,
"substatus":3,
"message":"Could not find user"
}
Tôi sẽ làm gì? Cách tốt nhất để sắp xếp lại đối tượng lỗi của tôi và đặt nó trong thông báo phản hồi?
Tôi cũng đã nhìn vào ModelStateDictionary
một chút và đã đưa ra chút này của một "hack", nhưng nó vẫn không phải là một kết quả sạch:
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));
chỉnh sửa
trông giống như một tuỳ chỉnh HttpError
là những gì tôi cần. Điều này dường như làm các trick, bây giờ để làm cho nó có thể mở rộng từ lớp doanh nghiệp của tôi ...
var error = new HttpError("invalid stuff") {{"status", -1}, {"substatus", 3}};
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));
Tại sao bạn ẩn thuộc tính Message? Nó sẽ không an toàn hơn để gọi ctor cơ sở và truyền thông điệp theo cách đó? – Andy