【发布时间】:2015-10-01 04:54:50
【问题描述】:
当我在我的 MVVM Cross Android 应用程序中发出 Web 请求 (GET) 时,我经常收到 NameResolutionFailure 错误。
我已经尝试了论坛中提供的很多关于这个问题的建议,因为这是一个常见的问题,但我无法解决这个问题。
我当前的尝试使用 NuGet 包 ModernHttpClient 来执行 Web 请求。发生同样的错误 - 无法将域解析为 IP - 但是错误消息与我使用 HttpWebRequest 时发生的情况略有不同,所以我想这是一个轻微的改进?
java.net.UnknownHostException:无法解析主机“jsonplaceholder.typicode.com”:没有与主机名关联的地址
您能否就为什么总是失败提供建议?也许是我的方法没有真正利用ModernHttpClient?
以下代码是我的IRestService 类的一部分,它位于Core PCL 中,而不是在 Android 项目中。
public async Task MakeRequest(WebHeaderCollection headers = null)
{
var handler = new NativeMessageHandler();
string requestUrl = "http://jsonplaceholder.typicode.com/posts/1";
try
{
using (var client = new HttpClient(handler))
{
//client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetAsync(requestUrl);
if (response.IsSuccessStatusCode)
{
var stream = await response.Content.ReadAsStreamAsync();
var reader = new StreamReader(stream);
Mvx.Trace("Stream: {0}", reader.ReadToEnd());
}
}
}
catch (WebException ex)
{
Mvx.Trace("MakeRequest Error: '{0}'", ex.Message);
}
return;
}
PS:我也尝试过使用 Cheesebarons ModernHttpClient MVVM Cross 插件,但这会导致发布模式下的编译错误,并且没有关于它有哪些方法和类的文档 - 也许它不再受支持?
PPS: 是的,我的清单具有 Internet 权限(我检查了选项和实际清单文件以确认)
【问题讨论】:
-
有些人说这可能是网络问题。您是否尝试过其他网络,包括蜂窝网络? forums.xamarin.com/discussion/7327/…
-
@Eraph 感谢您的评论。不幸的是,我尝试过家庭 wifi、便携式 wifi 拇指驱动器和 4g 没有运气
-
这在我的 Genymotion 模拟器 (Nexus) 和实际的华为手机上也失败了。就像其他人所说的那样,几周前使用
HttpWebRequest可以正常工作,但现在突然不行了。 -
也可以尝试在xamarin官方论坛发帖,Cheesebaron比较活跃,他用这个名字作为用户名,你可以把他加入主题