c# - Xamarin Android HttpClient.GetAsync 仅适用于 Wifi 而不是移动数据?
问题描述
我最近遇到了一个奇怪的问题。我有 Xamarin Android 项目,每次我使用带有移动数据的真实设备调用 http 请求时,它都会抛出 HttpRequestException,如果我使用的是 WiFi,一切都很好。
我调用 HttpRequest 的代码是
var url = "some/parameter"
var client = new HttpClient();
client.BaseAddress = new Uri("http://xxx.xxx.xxx");
await client.GetAsync(url);
以下是 HttpRequestException 的详细信息:
内部异常:{System.Net.Sockets.SocketException (0x80004005): No such host is known at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x000c8] in /Users/builder/jenkins/workspace/a…}
错误代码:11001
消息:没有这样的主机已知
SocketErrorCode:HostNotFound
StackTrace 如下:
at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x00180] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:84
at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x000ea] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:385
at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (System.Threading.Tasks.ValueTask`1[TResult] creationTask) [0x000a2] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:543
at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync (System.Net.Http.HttpRequestMessage request, System.Boolean doRequestAuth, System.Threading.CancellationToken cancellationToken) [0x0003f] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:284
at System.Net.Http.RedirectHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x00070] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs:32
at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs:506
我已将这些包含在我的 Android.Manifest.xml 中
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
我的移动数据连接很好,因为我仍然可以使用移动数据访问其他应用程序,我不知道为什么使用 WiFi 和移动数据之间存在差异,尤其是 HttpRequest?我可以做些什么来解决我的项目中的这个问题?有什么帮助吗?
解决方案
推荐阅读
- java - 从 Set (Collection) 中获取任何项目
- sql-injection - 使用 Dynogels 进行 NoSQL 注入
- c++ - 如何检查条件是否为真 5 秒?
- javascript - 如何在 ES6 中扩展从父类继承的类属性?
- docker - 我的 docker 无法使用私有注册表(503 服务不可用)
- dart - 为什么 Dart 隔离中的流在没有接收端口的情况下不起作用
- excel - 将单行(名称、开始日期、结束日期)转换为多行
- selenium - 如何使用 Selenium IDE 获取单击值
- php - 如何使用 PHP 通过 id 在 MySQL 表中获取最新元素
- php - 如何在具有 PERL 模式的 PHP 上计算校验和