我正在尝试使用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请求缓存异常或其他东西并重复抛出而不尝试连接。我怎样才能解决这个问题(实际上是什么问题)?
答案 0 :(得分:0)
我也有这个问题,经过一些测试后发现问题出在Fusillade库。现在最初的问题是fixing changes没有反映在NuGet包中,所以你需要从Github repo下载最新的源代码并引用更新的dll。
看起来底层问题是由于请求失败enqueued and played back,即使请求导致WebException。
我在项目中加入了最新的代码并确认它们正在运行。