HttpClient 在使用 Xamarin 在 VS 中构建的 IOs 应用程序中不起作用
HttpClient doesn't works in IOs app builded in VS with Xamarin
我尝试在我的 PCL/Android/iOs 项目中提出等待请求。请求函数在 PCL
public class DataService
{
private static string _requestUri = "https://requesturi.com/";
public static async Task<LocalizationData> GetLocalization(string code)
{
string queryString = _requestUri + "get_localization.php" + "?code=" + code;
HttpClient client = new HttpClient();
var response = await client.GetAsync(queryString);
dynamic data = null;
if (response != null)
{
string json = response.Content.ReadAsStringAsync().Result;
data = JsonConvert.DeserializeObject(json);
if (data["status"] == "success")
{
List<string> aliases = new List<string>();
List<string> translations = new List<string>();
foreach (var localization in data["localizations"])
{
aliases.Add((string)localization["alias"]);
translations.Add((string)localization["translation"]);
}
LocalizationData localizationData = new LocalizationData(code, aliases.ToArray(), translations.ToArray());
return localizationData;
}
else
{
return null;
}
}
return null;
}
}
在Android和iOS中我都用
调用这个函数
localizationData = await DataService.GetLocalization(langCode);
在Android中,它在模拟器和真实设备上都可以正常工作。
但是当我在 iOS 中尝试 运行 时,在模拟器上它工作正常,在真实设备上
应用程序崩溃
var response = await client.GetAsync(queryString);
与权限有关吗?或者是其他东西?
有人可以帮我解决这个问题吗?
已更新
client.GetAsync(queryString)有例外 我在真实设备上进入应用程序:
"Operation is not valid due to the current state of the object"
根据 Xamarin forum 中的讨论帖,这是参考文献的问题。由于 iOS 设备(AOT)和模拟器(JIT)构建性质之间的差异,似乎 httpClient 实例是在单内存中创建的,而不是在 iOS 内存中创建的。
尝试:
1) Go to References of ios Project
2) Edit References
3) Check 'System.Net.Http'
通常 - 使用 ModernHttpClient - 它为本机网络提供包装器 API,它比默认的 .Net HttpClient 更安全、更快。
我尝试在我的 PCL/Android/iOs 项目中提出等待请求。请求函数在 PCL
public class DataService
{
private static string _requestUri = "https://requesturi.com/";
public static async Task<LocalizationData> GetLocalization(string code)
{
string queryString = _requestUri + "get_localization.php" + "?code=" + code;
HttpClient client = new HttpClient();
var response = await client.GetAsync(queryString);
dynamic data = null;
if (response != null)
{
string json = response.Content.ReadAsStringAsync().Result;
data = JsonConvert.DeserializeObject(json);
if (data["status"] == "success")
{
List<string> aliases = new List<string>();
List<string> translations = new List<string>();
foreach (var localization in data["localizations"])
{
aliases.Add((string)localization["alias"]);
translations.Add((string)localization["translation"]);
}
LocalizationData localizationData = new LocalizationData(code, aliases.ToArray(), translations.ToArray());
return localizationData;
}
else
{
return null;
}
}
return null;
}
}
在Android和iOS中我都用
调用这个函数localizationData = await DataService.GetLocalization(langCode);
在Android中,它在模拟器和真实设备上都可以正常工作。 但是当我在 iOS 中尝试 运行 时,在模拟器上它工作正常,在真实设备上
应用程序崩溃var response = await client.GetAsync(queryString);
与权限有关吗?或者是其他东西? 有人可以帮我解决这个问题吗?
已更新
client.GetAsync(queryString)有例外 我在真实设备上进入应用程序: "Operation is not valid due to the current state of the object"
根据 Xamarin forum 中的讨论帖,这是参考文献的问题。由于 iOS 设备(AOT)和模拟器(JIT)构建性质之间的差异,似乎 httpClient 实例是在单内存中创建的,而不是在 iOS 内存中创建的。
尝试:
1) Go to References of ios Project
2) Edit References
3) Check 'System.Net.Http'
通常 - 使用 ModernHttpClient - 它为本机网络提供包装器 API,它比默认的 .Net HttpClient 更安全、更快。