2013-05-13 36 views
5

Tôi có webservice khá chung chung, phản hồi với nhiều trạng thái http chuẩn. Tuy nhiên, nó trả về các loại khác nhau theo các trạng thái này. Đây là thực thi REST hoàn toàn thích hợp: Tôi nhận thực thể Person với trạng thái 200 (OK), nhưng khi xảy ra lỗi, ví dụ như auth problem, tôi nhận được 403 (Forbidden) với danh sách các thông báo lỗi (nói rằng token đã hết hạn hoặc tài khoản của tôi là không hoạt động, v.v.)Sử dụng RestSharp để deserialize các kết quả dữ liệu khác nhau từ một tài nguyên

Thật không may, chỉ sử dụng RestSharp tôi có thể "ràng buộc" với một loại dữ liệu mà tôi nên mong đợi:

client.ExecuteAsync<Person>(request, (response) => 
    { 
     callback(response.Data); 
    }); 

Làm thế nào tôi nên nắm bắt các thông báo lỗi, khi tình trạng khác với 200? Tất nhiên, tôi có thể làm điều này bằng tay và deserialize nội dung phản ứng bản thân mình, nhưng tôi nghĩ rằng nên có một số sạch hơn, cách tốt hơn để thực hiện điều đó. Tôi muốn sử dụng một cái gì đó như thế này:

client.ExecuteAsync<Person, ErrorList>(request, (response) => 
    { 
     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      Callback(response.Data); 
     } 
     else if (response.StatusCode == HttpStatusCode.OK) 
     { 
      ErrorCallback(response.Errors); 
     } 
    }); 

Trả lời

3

Cách mà tôi luôn xử lý nó là viết một bộ xử lý bài để trả lời lại. một cái gì đó như thế này,

public class Response<T> 
{ 
    public T Data {get;set;} 
    public List<Error> Errors {get;set;} 
} 

public static Response<T> GetResponse<T>(this IRestResponse restResponse) 
{ 
     var response = new Response<T>(); 

     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      response.Data = JsonConvert.DeserilizeObject<T>(restResponse.Data) 
     } 

     response.Errors =JsonConvert.DeserilizeObject<List<Error>>(restResponse.Error) 

     return response; 
} 

và bạn có thể sử dụng nó như thế này,

var response = client.Execute(request).GetResponse<T>(); 
+0

Vì vậy, về cơ bản nó là deserialization bằng tay. Tuy nhiên, phương pháp mở rộng là một lựa chọn tốt, tôi đã không nghĩ về nó. – jacek

+0

Vì vậy, điều này giả định rằng API của bạn trả về JSON dưới dạng mảng Dữ liệu và Lỗi? –

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