Android - Refit意外抛出UnknownHostException

时间:2015-08-31 22:30:04

标签: c# android xamarin httpclient refit

我正在尝试使用Xamarin实现Refit,并且出于某种原因,如果我之前在应用程序打开时未连接到wifi,则会抛出UnknownHostException(UHExc)。但这并非始终如一。

我有两次调用Refit实例化我的“Refit-interface”: PostLoginAsync GetDataAsync ,如下所示(我一直关注的指南是{ {3}}):

public async Task<SomeClass> PostLogin(string user, string password)
{
    SomeClass response = null;

    var loginTask = apiService.UserInitiated.PostLoginAsync(new RequestBody(user: user, password: password));
    response = await FireWebTask(loginTask);

    return response;
}

private async Task<List<Data>> GetRemoteDataAsync(string args)
{
    List<Data> list = null;

    var getDataTask = apiService.UserInitiated.GetDataAsync(args);
    list = await FireWebTask(getDataTask);

    return list;
}

“改装界面”看起来像这样:

...
[Post("/relative/url/to/login")]
Task<SomeClass> PostLoginAsync([Body(BodySerializationMethod.Json)] RequestBody requestBody);

[Get("/relative/url/to/data")]
Task<List<Data>> GetDataAsync([Header("SomeHeader")] string args);
...

当我打开没有连接到互联网的应用程序并尝试发送 PostLogin - 请求时,我按预期获得了一个UHExc。如果我然后打开wifi并再次尝试(不关闭应用程序)我再次获得UHExc,只是这次几乎没有延迟第一次(好像异常被缓存?)。重新启动应用程序并在不断开wifi的情况下再次尝试工作正常。

如果我对第二个请求执行完全相同的操作( GetData )我首先得到一个UHExc(显然),但是当重新连接wifi时,它可以完美地工作。所以在我看来,像POST请求缓存异常或其他东西并重复抛出而不尝试连接。我怎样才能解决这个问题(实际上是什么问题)?

1 个答案:

答案 0 :(得分:0)

我也有这个问题,经过一些测试后发现问题出在Fusillade库。现在最初的问题是fixing changes没有反映在NuGet包中,所以你需要从Github repo下载最新的源代码并引用更新的dll。

看起来底层问题是由于请求失败enqueued and played back,即使请求导致WebException。

我在项目中加入了最新的代码并确认它们正在运行。