Exception Xamarin表单:PCL中的ModernHttpClient错误处理

Exception Xamarin表单:PCL中的ModernHttpClient错误处理,exception,xamarin.forms,Exception,Xamarin.forms,我的应用程序连接到需要HTTPS连接的api。 ModernHttpClient(NativeMessageHandler)在引发异常之前工作正常… 当没有可用的wifi时,会在Android上引发未知的hostException。有没有可能制作一款既适用于Android又适用于iOS的游戏?UnknownHostException位于Java.Net库中,无法在iOS项目中使用。在执行请求之前,您可以在共享的Xamarin表单代码中使用来检查internet连接。您可以使用Xam.Plugin

我的应用程序连接到需要HTTPS连接的api。
ModernHttpClient(NativeMessageHandler)在引发异常之前工作正常…

当没有可用的wifi时,会在Android上引发未知的hostException。有没有可能制作一款既适用于Android又适用于iOS的游戏?UnknownHostException位于Java.Net库中,无法在iOS项目中使用。

在执行请求之前,您可以在共享的Xamarin表单代码中使用来检查internet连接。

您可以使用Xam.Plugin.Connectivity NuGet包来检查Xamarin.Forms中的网络连接,使用以下代码

if (CrossConnectivity.Current.IsConnected) {  
    // your logic...  
} else {  
    // write your code if there is no Internet available  
}  


请参阅

我个人正在使用跨平台接口来处理网络错误。例如,您可以有如下内容(在本例中使用MvvmCross):


您可以在每个平台上具体实施,或者仅在需要时实施。当然,这是一个简单的例子,您可以让每个平台提供有关其特定网络错误的更多信息。

考虑到可能引发的所有其他错误,这并不是一个很好的解决方案,例如,实际上存在移动连接,但它是脆弱的。事实上,当你开始做你的事情时,有一种联系并不能保证它在你做你的事情时会一直存在。绝对正确,但是,同一组件还公开了在连接发生变化时处理的事件,因此您可以连接到这些事件来处理您描述的情况。如果您在执行请求时连接断开,这几乎没有用。我并不是说你不应该检查连接——你应该检查,这样可以避免很多问题。我只是说,这并不能完全免除您执行连接异常处理的需要。
try
{
    var client = new HttpClient();
    var result = await client.GetAsync("http://some-url.com");
}
catch (Exception e)
{
    var platformErrorChecker = Mvx.Resolve<IPlatformNetworkError>();
    if (platformErrorChecker.IsNetworkError(e))
    {
        // Handle network error
    }
    else
    {
        // Other exception, just throw
        throw;
    }
}
public interface IPlatformNetworkError
{
    bool IsNetworkError(Exception e);
}