2017-02-22 160 views
-1

有人建議我一個好的休息客戶端,我可以使用我的Xamarin表單跨平臺應用程序?Xamarin表格Rest客戶端

(Android和Windows Phone)

在此先感謝。

回答

1

這是一個非常開放的問題。

反正我最喜歡的:

Refit

更新卸下其他兩個庫,即使你可以做休息與他們,他們不認爲REST客戶,但HTTP客戶端。

+0

我不會把這些REST客戶端,除了改裝。 ModernHttpClient和HttpClient就像它們的名字一樣,表示HTTP客戶端可以調用Internet上的任何HTTP服務,而不限於RESTful服務。 – Cheesebaron

+0

你是對的,不限於RESTful,但他們也是RESTful,所以他們不應該算作REST客戶端嗎? – apineda

+0

OP正在尋找一個「良好的休息客戶」。我會爭論一個HTTP客戶端不能滿足這個(基於觀點的),因爲它不會讓調用RESTful API變得容易。它只是提供運輸。 – Cheesebaron

0

我不知道這個目的是否有簡單的實現,但你必須根據你的需要編寫你自己的解析器,發送器,接收器。我會給你一個小例子:)首先我有一個基類,我一般restCall

public abstract class BaseDto 
{ 
    public string Id {get;set;} 
} 

不是寫你的業務對象,如

public class UserDto : BaseDto 
{ 
    public string Name {get;set;} 
    //etc. 
} 
public class SavedUserDto : BaseDto 
{ 
    public int Id {get;set;} 
    public string Name {get;set;} 
    //etc. 
} 

比寫一個簡單的HTTP調用者

public string Post<T>(string url, T entity) where T : BaseDto 
{ 
    //here u will write a HttpClient and send receive json. U can find examples on the net. Of course use Newtonsoft for json convertions 
} 

比寫一個通用的方法來調用這個post方法,當然你會發送一個baseDto並且接收一個baseDto太:) :)

public K Call<T, K>(
     string restApiPath, 
     T entity) where T : BaseDto where K : BaseDto 
{ 
    var response = Post(restApiPath, entity); 
    //you can handle errors, auth faults etc. here. 
    return JsonConvert.DeserializeObject<K>(response); 
} 

不是在你的代碼只是做

var savedUser = Call<UserDto,SavedUserDto>("127.0.0.1/user/save",new UserDto{Name="John"}) 

希望它可以給你出個主意。當你在你的rest api上添加一個新的服務方法時,你可以用一行代碼來調用它(當然你必須編寫新的業務DTO的 - 又名數據傳輸對象:))

當然,所有這些POST和CALL方法在不同的類上。不要忘記,一個班級只能做一件事。所以POST方法所有者類(我們稱之爲HttpCaller)只會將Dto發送到服務器並獲得答案。 CALL方法所有者類(讓我們稱之爲MyService)將得到resut並處理它。

0

您可以使用HttpClient。這很好。從nuget獲得System.Http.Net

1

你可以Microsoft HTTP Client Libraries

然後,定義一個RestService類,它包含一個HttpClient的例如:

public class RestService : IRestService 
{ 
    HttpClient client; 

    public RestService() 
    { 
     client = new HttpClient(); 
     client.MaxResponseContentBufferSize = 256000; 
    } 

    // example for GET request 
    public async Task<List<TodoItem>> RefreshDataAsync() 
    { 
     var uri = new Uri(string.Format(Constants.RestUrl, string.Empty)); 
     var response = await client.GetAsync(uri); // make a GET request 
     if (response.IsSuccessStatusCode) 
     { 
      var content = await response.Content.ReadAsStringAsync(); 
      // handle response here 
     } 
    } 
} 

您應該按照這篇文章: https://developer.xamarin.com/guides/xamarin-forms/cloud-services/consuming/rest/