2013-05-13 19 views
5

Birçok standart http durumuna yanıt veren oldukça genel bir web servisine sahibim. Bununla birlikte, bu durumlara göre farklı türler döndürür. Bu tamamen uygun REST uygulamasıdır: Durum 200 (Tamam) ile bir Kişi varlığına sahip olurum, ancak hata oluştuğunda, örneğin, yetkilendirme sorunu, 403 (Yasak) hata iletileri listesiyle birlikte aldım (belirtecin süresinin dolduğunu veya hesabımın olduğunu belirten aktif değil, vb.Farklı kaynaklardan gelen çıktıları tek bir kaynaktan kaldırmak için RestSharp özelliğini kullanın.

Ne yazık ki, beklemeliyim bir veri tipine sadece "bağlama" RestSharp yapabilirsiniz kullanarak:

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

Nasıl durumu 200 farklı olduğunda ben, hata mesajları yakalamak gerekir? Tabii ki bunu el ile yapabilirim ve yanıt içeriğini kendim toparlayabilirim, ama bunu başarmak için daha temiz, daha iyi bir yol olmalı diye düşünüyorum. Böyle bir şey kullanmak istiyorum:

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

cevap

3

Hep restsharp yanıt için bir post işlemci yazmaktır ele etmen. Bu gibi kullanabilirsiniz

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; 
} 

ve böyle bir şey,

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

Yani temelde elle seri kaldırma olduğunu. Ancak, uzatma yöntemi iyi bir seçimdir, bunu düşünmedim. – jacek

+0

Yani bu, API'nizin Veri ve Hatalar dizisi biçiminde JSON'u döndürdüğünü varsayar? –

İlgili konular