c# - Xamarin.Forms - HttpClient SendAsync 中未处理的异常

标签 c# android xamarin.forms

尝试在 Android 上发送 HTTP 请求时遇到异常。 在 WinPhone 上,它可以工作。 这是我的代码:

        string resp = null;

        using (var client = new HttpClient())
        {
            var httpRequest = new HttpRequestMessage(new HttpMethod("POST"), _uri);
            //client.BaseAddress = new Uri(_uri);
            try
            {
                client.Timeout = TimeSpan.FromSeconds(30);
                var _cancelTokenSource = new CancellationTokenSource();
                var _cancelToken = _cancelTokenSource.Token;
                var response = await client.SendAsync(httpRequest, _cancelToken);
                resp = await response.Content.ReadAsStringAsync();
                //var result = await client.PostAsync("", new StringContent(json.ToString(), Encoding.UTF8, "application/json"));
                //resp = await result.Content.ReadAsStringAsync();
            }
            catch (Exception e)
            {
                Debug.WriteLine("HTTP ERROR: " + e.Message);
                throw e;
            }
        }

在 Properties > Android Manifest 我已经检查了 INTERNET 以获得许可。 此外,它经历了一个未处理的异常,我看不到发生了什么。它没有显示确切的错误,也没有显示我设置的未处理异常的方法:

AndroidEnvironment.UnhandledExceptionRaiser += AppDroid_UnhandledExceptionHandler;

知道哪里出了问题或知道如何查看错误消息吗?在 WinPhone 上,当出现意外错误时,它会到达我的方法,然后很容易修复。

谢谢!

最佳答案

Android HttpClient 上有一个已知错误。看到这个:http://forums.xamarin.com/discussion/36470/httpclient-postasync-deadlock-system-net-sockets-connect-internal

将其更改为:

using (var client = new HttpClient())
        {
            var httpRequest = new HttpRequestMessage(new HttpMethod("POST"), _uri);
            //client.BaseAddress = new Uri(_uri);
            try
            {
                client.Timeout = TimeSpan.FromSeconds(30);
                var _cancelTokenSource = new CancellationTokenSource();
                var _cancelToken = _cancelTokenSource.Token;
                var response = await client.SendAsync(httpRequest, _cancelToken).ConfigureAwait(false);
                resp = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
            }
            catch (Exception e)
            {
                Debug.WriteLine("HTTP ERROR: " + e.Message);
                throw e;
            }
        }

您也可以试试 ModernHttpClient。这是直接替换。

关于c# - Xamarin.Forms - HttpClient SendAsync 中未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330146/

相关文章:

c# - Using Delegate.Combine error Event can only appear on the left-hand side of += or -=?

c# - 当用户在 RichTextBox 中键入时更改字体颜色

c# - 将 Grid.RowDefinition 高度绑定(bind)到 Xamarin 中的网格宽度

c# - 如何使用服务器托管功能应用程序的托管标识获取资源组?

c# - 如何根据实体输入参数过滤 IEnumerable

java - 如何获取视频文件详细信息,例如。安卓的持续时间?

android - Android Room 加入的返回类型

android - 检测用户是否已从他的 Facebook 应用程序中删除了我的应用程序

javascript - WebView.Eval 不在我的 HTML 中调用 javascript 函数 - Xamarin Forms

android - 如何在 android 屏幕 xamarin 表单上的任何地方隐藏左侧菜单?