1

我正在开发一个 Android Xamarin 应用程序。此应用程序通过 Wi-fi 连接到设备(该设备是接入点),当应用程序连接到设备时,手机上没有互联网连接。

因此,当我断开与设备 AP 的连接并将手机连接到具有互联网连接的另一个网络时,我尝试向服务器发出 HTTP 请求,但我总是收到“网络无法访问”错误,即使手机确实有连接(测试访问 Chrome )。只有在我重新启动应用程序后才能再次工作。

我正在使用我在网上找到的关于 HttpClient 类的所有良好实践(不包含在“使用”语句中,只使用一个静态 HttpClient 对象而不是在每个请求上创建一个新对象等)

我实现了 IHttpClientFactory 来创建 HttpClient,但仍然得到同样的错误。

我的代码(简化):

public static class WebRepository
{
private static IHttpClientFactory _clientFactory;
private static HttpClient _client;

static WebRepository() 
{
    _clientFactory = Startup.ServiceProvider.GetService<IHttpClientFactory>();
    _client = _clientFactory.CreateClient();
}

public static async Task<T> GetAsync<T>(string url)
{
    try
    {
        if (Globals.LoggedUser != null)
            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", $"{Globals.LoggedUser.Token}");
        HttpResponseMessage message = await _client.GetAsync(url).ConfigureAwait(false);
        return await DeserializeResponseMessageAsync<T>(message);
    }
    catch(HttpRequestException e) when(e.InnerException != null && e.InnerException is SocketException && e.Message.Contains("Network is unreachable"))
    {
        _client.CancelPendingRequests();
        _client.Dispose();
        _client = _clientFactory.CreateClient(); //Tried to create a new client in order to "refresh" connection, so in the next Get request it would be a new client, but no luck. Still gets the excepction every time.
        throw e;
    }
    catch(Exception) { throw; }
}
}
4

0 回答 0