2017-04-10 9 views
2

Ich verwende die Refit-Bibliothek in meiner Xamarin-App. Ich möchte für die Anforderung ein Zeitlimit von 10 Sekunden festlegen. Gibt es eine Möglichkeit, dies in Refit zu tun?So legen Sie das Zeitlimit in der Refit-Bibliothek fest

Schnittstelle:

interface IDevice 
{ 
    [Get("/app/device/{id}")] 
    Task<Device> GetDevice(string id, [Header("Authorization")] string authorization); 
} 

die API

var device = RestService.For<IDevice>("http://localhost");    
var dev = await device.GetDevice("15e2a691-06df-4741-b26e-87e1eecc6bd7", "Bearer OAUTH_TOKEN"); 

Antwort

3

fand ich endlich einen Weg zum Einstellen der Timeout für eine Anforderung in Refit aufrufen. Ich habe CancelationToken verwendet. Hier ist der modifizierte Code nach CancelationToken

Schnittstelle ergänzt:

interface IDevice 
{ 
    [Get("/app/device/{id}")] 
    Task<Device> GetDevice(string id, [Header("Authorization")] string authorization, CancellationToken cancellationToken); 
} 

Aufrufen der API:

var device = RestService.For<IDevice>("http://localhost");  
CancellationTokenSource tokenSource = new CancellationTokenSource(); 
tokenSource.CancelAfter(10000); // 10000 ms 
CancellationToken token = tokenSource.Token;   
var dev = await device.GetDevice("15e2a691-06df-4741-b26e-87e1eecc6bd7", "Bearer OAUTH_TOKEN", token); 

Es funktioniert für mich richtig. Ich weiß nicht, ob es richtig ist oder nicht. Wenn es falsch ist, schlagen Sie bitte den richtigen Weg vor.

3

Die akzeptierte Antwort ist die richtige Art und Weise ein Timeout für eine einzelne Anforderung zu erzwingen, aber wenn Sie einen einzigen konsistenten Timeout-Wert für alle Anforderungen haben wollen, können Sie eine vorkonfigurierte HttpClient mit Timeout Objekt übergeben:

var api = RestService.For<IDevice>(new HttpClient 
{ 
    BaseAddress = new Uri("http://localhost"), 
    Timeout = TimeSpan.FromSeconds(10) 
}); 

Hier ist ein example project.

+0

Scheint nicht mit der neuesten Version zu funktionieren. –

+0

Es funktioniert für mich. Welcher Teil funktioniert nicht? Das Festlegen eines Zeitlimits auf diese Weise hat nichts mit Refit zu tun - es ist nur ein Standard-'HttpClient'. –

+0

@MarkFeldman Der Antwort wurde ein Link zu einem Beispielprojekt hinzugefügt. –

Verwandte Themen