2015-12-26 21 views
12

Một cuộc gọi http điển hình sử dụng RestSharp trông như sau:Chiến lược thích hợp để xử lý phản hồi lỗi từ RestSharp là gì?

var client = new RestClient("http://exampleapi.com"); 
var request = new RestRequest("someapi", Method.GET); 
IRestResponse response = client.Execute(request); 

Từ tài liệu tại https://github.com/restsharp/RestSharp/wiki/Getting-Started:

Nếu có một lỗi giao thông mạng (mạng bị ngắt, không tra cứu DNS, vv), RestResponse.Status sẽ được đặt thành ResponseStatus.Error, nếu không nó sẽ là ResponseStatus.Completed. Nếu một API trả về 404, ResponseStatus sẽ vẫn được hoàn thành. Nếu bạn cần truy cập vào mã trạng thái HTTP, bạn sẽ tìm thấy nó tại RestResponse.StatusCode.

Hơn nữa, sau đây dường như hành vi của phản ứng RestSharp:

  • RestClient.Execute() sẽ không bao giờ ném một ngoại lệ
  • Nếu yêu cầu mạng thất bại, tức là một điều kiện xảy ra mà có thể thường dẫn đến một ngoại lệ (ví dụ: mạng đã hết thời gian, không thể truy cập được, không thể giải quyết được), sau đó response.ErrorException sẽ được điền bằng một số loại có nguồn gốc ngoại lệ và response.ErrorMessage sẽ chứa một số chuỗi lỗi tin nhắn và response.StatusCode sẽ được đặt thành ResponseStatus.Error, Response.Status.Aborted, ResponseStatus.TimedOut vv
  • Nếu yêu cầu mạng thành công nhưng có một số lỗi HTTP (ví dụ như 404 không tìm thấy, 500 lỗi máy chủ, vv), sau đó response.StatusCode sẽ được thiết lập để NotFound, vv, Response.ErrorExceptionResponse.Error sẽ nullresponse.StatusCode sẽ được đặt thành 'ResponseStatus.Completed`.

Tôi có thể đã bỏ lỡ một số phản hồi có thể có, nhưng tôi nghĩ ý chính là ở đó.

Với điều này, làm cách nào để xác định phản hồi thành công hay thất bại? Tùy chọn bao gồm:

  • Nếu ErrorException == null sau đó kiểm tra phản ứng http
  • Nếu response.ResponseStatus == ResponseStatus.Completed sau đó kiểm tra Response.StatusCode và tùy thuộc vào kết quả, lấy các dữ liệu phản ứng và xử lý phù hợp nếu không phải những gì bạn mong đợi
  • Nếu http phản hồi là một số lỗi sau đó tùy thuộc vào loại lỗi kiểm tra ErrorException
  • Khác ...?

Tôi không muốn lật đổ điều này nhưng tôi giả sử có một mẫu (vì thiếu thuật ngữ tốt hơn) để xử lý việc này một cách rõ ràng.

Trả lời

0

Tôi nghĩ mã phản hồi là loại HttpStatusCode. để bạn có thể lấy mã như dưới đây. Sau đó bạn biết làm thế nào để xử lý nó tôi đoán.

RestResponse response = client.Execute(request); 
HttpStatusCode statusCode = response.StatusCode; 
int numericStatusCode = (int)statusCode; 
1

Với điều này, làm cách nào để xác định phản hồi thành công hay thất bại?

Tôi khuyên bạn nên kiểm tra ((int) response.StatusCode). Nếu 200 <= ((int) response.StatusCode) && ((int) response.StatusCode) < 400, nó đã thành công (cho một định nghĩa cố ý mơ hồ về thành công).Nếu không, mã trạng thái nằm ngoài phạm vi này hoặc response.ErrorException có điều gì đó thú vị.

Nếu bạn đang mong đợi một mã trạng thái cụ thể, bạn có thể thực hiện một hành động nếu đó là một số mã không phải lỗi khác. Ví dụ: nếu tôi chỉ mong đợi 200 câu trả lời, tôi có thể muốn ghi lại phản hồi 301 dưới dạng cảnh báo, nhưng tiếp tục.

Xem this answer để biết cách tiếp cận hơi khác.

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