2013-05-26 64 views
10

Tôi đang phát triển một API REST hoàn toàn mới bằng cách sử dụng ASP.NET Web API. Đến từ một nền WCF, tôi cảm thấy bị lôi cuốn khi tạo ra "các hợp đồng lỗi" cho API của tôi.Trả về lỗi trong API Web

Trong trường hợp này, tôi không nói về các ngoại lệ chưa được giải quyết được trả lại cho khách hàng. Thay vào đó, tôi đang tập trung vào các lỗi như API đang được khách hàng sử dụng không đúng - đặc biệt là những nơi mà khách hàng có thể tự động tạo các lỗi này và gửi lại các yêu cầu.

Hầu hết các ví dụ tôi đã tìm thấy chỉ có một chuỗi được trả lại, thường là bằng cách ném một HttpResponseException, hoặc ít nhất là làm một số công cụ để thực hiện quá trình xây dựng một chuỗi lỗi thông tin mới hơn tự động: Return custom error objects in Web API

tôi m suy nghĩ về thay vì tạo ra một HttpResponseException, đi qua trong một HttpResponseMessage có nội dung được đặt thành loại hợp đồng lỗi cụ thể của tôi.

API của tôi cũng đang sử dụng quá nhiều xác thực mô hình tự động, và các lỗi xác thực mô hình trở lại như một cấu trúc hoàn toàn khác.

Vì vậy, tôi có nên buộc "lỗi" của tôi vào cùng một định dạng với phản hồi xác thực mô hình không? Các phương pháp hay nhất ở đây là gì?

Cuối cùng, API của tôi sẽ hiển thị các tùy chọn định dạng bộ đệm giao thức json, xml và giao thức. Kết quả là, tôi thực sự cần phải đảm bảo rằng chiến lược của tôi là độc lập với định dạng.

Trả lời

19

tôi viết blog này gửi một khi trở lại về cách Web API thực hiện xử lý lỗi:

http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx

Nó sẽ giúp giải đáp thắc mắc của bạn. Về cơ bản, bạn có hai tùy chọn:

  1. Xác định lớp học của riêng bạn để trả lời lỗi. Trong trường hợp này, bạn muốn đảm bảo lớp của bạn có thể được tuần tự hóa dưới dạng XML, JSON, v.v. Sau đó, bạn có thể sử dụng Request.CreateResponse(statusCode, myErrorInstance) để gửi lại các lỗi tùy chỉnh của mình. Bạn cũng có thể muốn một cách để biến trạng thái mô hình không hợp lệ thành loại lỗi cụ thể của bạn.

  2. Sử dụng loại phản hồi lỗi của API Web: HttpError. HttpError về bản chất là một Dictionary<string, object> nơi bạn thêm các khóa và giá trị của riêng mình vào HttpError. Những lợi thế là rất nhiều - lỗi của bạn sẽ trông giống như lỗi Web API, bạn biết nó hoạt động với tất cả các trình định dạng và bạn có thể tránh được việc phải xác định các phép biến đổi từ các ngoại lệ và trạng thái mô hình không hợp lệ. Cách dễ nhất để sử dụng HttpError là gọi Request.CreateErrorResponse().

+0

bạn có thể cung cấp thêm thông tin về HttpError và cách tốt nhất để trả lại không? Nó vẫn là cách tiêu chuẩn để trả về lỗi - tôi có thể tìm thấy ít về nó - thx. Nó cũng không xuất hiện để làm việc với IHttpActionResult. – niico

1

Bạn có thể làm bất cứ điều gì bạn muốn trong những trường hợp này. Trải nghiệm tốt nhất cho người tiêu dùng api trên web của bạn là đảm bảo rằng bạn sử dụng các thông báo lỗi thân thiện, trong trường hợp này bạn sẽ muốn sắp xếp các lỗi của mình thành các đối tượng json được định dạng tốt. Bài đăng trên blog sau đây cung cấp một số trường hợp sử dụng và giải pháp mà tôi đã đưa ra: Web Api, HttpError and the Behavior of Exceptions

Các vấn đề liên quan